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 模式下
相关推荐
乘云数字DATABUFF8 小时前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--2 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森2 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜3 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB4 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode5 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220706 天前
如何搭建本地yum源(上)
运维
大树889 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠9 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质9 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务