JDBC 连接字连接 KingbaseES支持主从负载均衡参数说明。

JDBC 连接字符串是用于连接 KingbaseES(人大金仓数据库)的,支持主从负载均衡。让我们逐一解析各个参数的作用,并探讨如何调整到最优。

参数解析

bash 复制代码
jdbc:kingbase8://10.10.14.19:54321/xxx_online

jdbc:kingbase8://:指定 KingbaseES 数据库的 JDBC 连接协议。

10.10.14.19:54321:主库(Master) 的 IP 地址和端口号。

xxx_online:数据库名称。

bash 复制代码
?USEDISPATCH=true

作用:是否启用 KingbaseES 负载均衡调度。

优化建议:

一般建议开启(true),确保请求可分配到最优节点,避免单点压力过大。

若业务逻辑要求始终访问主库(例如强一致性场景),可设为 false。

bash 复制代码
&SLAVE_ADD=10.10.14.20,110.10.14.11

作用:定义**从库(Slave)**的 IP 地址列表(两个从库)。

优化建议:

确保从库配置正确,能正常同步主库数据。

适用于读多写少的业务场景,减少主库压力。

&SLAVE_PORT=54321,54321

作用:从库的端口号,对应 SLAVE_ADD 列表的主机。

优化建议:

需确保所有从库监听的端口正确,否则无法连接。

也可以为不同从库设定不同端口(如果有端口映射需求)。

bash 复制代码
&nodeList=node1,node2,node3

作用:数据库集群的节点名称(逻辑标识),在 KingbaseES 集群管理中可用于标识各个节点。

优化建议:

确保 nodeList 里的节点与 KingbaseES 集群管理配置匹配,否则无法正确负载均衡。

bash 复制代码
&HOSTLOADRATE=30

作用:负载阈值,决定 KingbaseES 何时将流量切换到其他节点。

优化建议:

默认 KingbaseES 可能设定为 30% 负载(即 CPU、内存、IO 负载超过 30% 时,切换请求到其他节点)。

优化思路:

业务压力较小:可调高,例如 HOSTLOADRATE=50(提高主库承载能力)。

业务压力较大:适当降低,如 HOSTLOADRATE=20(让从库分担更多压力)。

结合监控工具(如 top、iostat)观察数据库负载情况,调整最优值。

优化方案总结

默认情况(适用于一般业务):

bash 复制代码
jdbc:kingbase8://10.10.14.19:54321/gas_online?USEDISPATCH=true&SLAVE_ADD=10.10.14.20,10.10.14.21&SLAVE_PORT=54321,54321&nodeList=node1,node2,node3&HOSTLOADRATE=30

主从负载均衡开启,负载超过 30% 时切换到从库。

读多写少(推荐增加负载到从库):

bash 复制代码
jdbc:kingbase8://10.10.14.19:54321/gas_online?USEDISPATCH=true&SLAVE_ADD=10.10.14.20,10.10.14.21&SLAVE_PORT=54321,54321&nodeList=node1,node2,node3&HOSTLOADRATE=20

适用于 读操作多 的业务,将更多流量分配到从库,减少主库压力。

高并发写入业务(减少负载切换):

bash 复制代码
jdbc:kingbase8://10.10.14.19:54321/gas_online?USEDISPATCH=false&SLAVE_ADD=10.10.14.20,10.10.14.21&SLAVE_PORT=54321,54321&nodeList=node1,node2,node3&HOSTLOADRATE=50

适用于 写操作多 的场景,避免频繁切换主库,提高写入性能。

最终建议

读多写少:降低 HOSTLOADRATE(如 20),让更多查询走从库。

写入密集型:关闭 USEDISPATCH,提高 HOSTLOADRATE(如 50),减少主库频繁切换。

高可用性:确保 SLAVE_ADD 配置的从库同步正常,防止主库故障时读请求受影响。

用于恢复后库强制终止所有连接到 xxxx_online20250322 的会话:
bash 复制代码
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname = 'xxx_online20250322';

删除数据库:

bash 复制代码
DROP DATABASE xxx_online20250322;

使用 WITH FORCE 直接删除(KingbaseES 特有)

KingbaseES 支持 直接强制删除数据库的语法:

bash 复制代码
DROP DATABASE xxx_online20250322 WITH FORCE;

改为 restrict 方式,确保安全删除

如果不确定是否要强制终止连接,可以先执行:

bash 复制代码
REVOKE CONNECT ON DATABASE xxx_online20250322 FROM PUBLIC;

然后查找并逐一手动终止进程:

bash 复制代码
SELECT pid, application_name, client_addr FROM pg_stat_activity WHERE datname = 'xxx_online20250322';

手动终止特定连接:

bash 复制代码
SELECT pg_terminate_backend(<PID>);

再执行删除:

bash 复制代码
DROP DATABASE xxx_online20250322;

查询模式下没有主键的表

bash 复制代码
SELECT n.nspname AS schema_name, c.relname AS table_name
FROM pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
LEFT JOIN pg_index i ON c.oid = i.indrelid AND i.indisprimary
WHERE c.relkind = 'r'  -- 只查找普通表(不包括视图、索引等)
AND i.indrelid IS NULL  -- 筛选出没有主键的表
AND n.nspname = 'gas_business';  -- 限定在 gas_business 模式下

查询模式下没有主键的表并且拼接成sql,看数据量大小

bash 复制代码
SELECT STRING_AGG(
    'SELECT ''' || n.nspname || ''' AS schema_name, ''' || c.relname || ''' AS table_name, COUNT(*) AS row_count FROM "' || n.nspname || '"."' || c.relname || '"', 
    ' UNION ALL '
) AS query_string
FROM pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
LEFT JOIN pg_index i ON c.oid = i.indrelid AND i.indisprimary
WHERE c.relkind = 'r'  -- 只查找普通表
AND i.indrelid IS NULL  -- 筛选出没有主键的表
AND n.nspname = 'gas_business';  -- 限定在 gas_business 模式下
相关推荐
Lsir10110_7 分钟前
【Linux】进程信号(下半)
linux·运维·服务器
skywalk816324 分钟前
unbound dns解析出现问题,寻求解决之道
运维·服务器·dns·unbound
酉鬼女又兒25 分钟前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器
云飞云共享云桌面27 分钟前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
skywalk816329 分钟前
走近科学:unbound dns域名服务器自己本地解析出现问题,寻求解决之道
运维·服务器·dns·unbound
袁煦丞 cpolar内网穿透实验室33 分钟前
远程调试内网 Kafka 不再求运维!cpolar 内网穿透实验室第 791 个成功挑战
运维·分布式·kafka·远程工作·内网穿透·cpolar
AZ996ZA44 分钟前
自学linux的第二十一天【DHCP 服务从入门到实战】
linux·运维·服务器·php
神梦流2 小时前
GE 引擎的非标准数据流处理:稀疏张量与自定义算子在图优化中的语义保持
linux·运维·服务器
兜兜转转了多少年2 小时前
从脚本到系统:2026 年 AI 代理驱动的 Shell 自动化
运维·人工智能·自动化
Lsir10110_3 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件