人大金仓最大连接数
Posted 左直拳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人大金仓最大连接数相关的知识,希望对你有一定的参考价值。
人大金仓的连接数数量,需要根据服务器内存大小设置。
公司有台开发用的数据库服务器,专门跑人大金仓,人大金仓的最大连接数设置为500。但开发过程中,不到20号人一起开发,连接数时有耗尽。报这个错:
com.kingbase8.util.KSQLException: 致命错误: 已保留的连接位置为执行非复制请求的超级用户预留
还别说,kingbase起源于开源数据库项目postgreSql,概念玩起来一套套的,感觉比oracle还丰富。像这种在连接耗尽,为超级用户保留少量连接通道的思想就很赞。
回到我们的开发服务器。究竟要将最大连接数设为多少合适呢?
其实,这跟服务器的内存大小有关。内存大,连接数就可以设得多一些,相反就少。问题是,这个度怎么把握。
人大金仓的内存模型,或者说,其内存管理机制,是将内存分为2大部分:共享内存和本地内存。在这里,本地不是当前机器的意思,而是指每个数据库连接,本地内存只供每个数据库连接专用;共享内存则好理解,所有连接共用。
简单来说,“本地内存”其实就跟客户端连到数据库以后进行的一些操作有关,比如排序,使用或维护索引,存放临时处理结果等等。因此,数据库连接数跟“本地内存”息息相关。其中最重要的参数是work_mem(顾名思义,是连接进程的内存空间,用于排序、哈希操作等)。一台人大金仓服务器的数据库最大连接数应该满足:
最大连接数(max_connections) * work_mem大小 < 服务器总内存
work_mem默认大小为4M,据此可以算。
【work_mem】最早叫做sort_mem,声明每个后端进程内部排序和哈希操作可使用的工作内存大小。
典型的涉及排序的操作有goup by、order by、distinct、create index。人大进仓8支持并行查询,每个正在运行的进程都可能使用多个数量的work_mem。默认值为4M ,不能太大,否则连接多了,占内存;
也不能太小,否则sort、hash计算慢。
当然,前面说到,人大进仓的内存模型分为本地内存和共享内存,不能全部被本地内存占尽,所以也应该留一些给共享内存。留多少呢?目前我还不清楚,就倾向留一半。比如说,我们公司那台人大金仓服务器,内存共32G,操作系统分去4G,还剩28G,分一半给本地内存,(28G / 2) / 4M = (14 * 1024) / 4 = 3584。因此将连接数调到3500应该是没有问题的。不过管机器的人比较谨慎,我说服他调到1000。
效果如何,还须观察。
附录:一些观察连接数的命令
# 进人大金仓
ksql -h 192.168.0.79 -U system gistest
# 看最大可用连接数
show max_connections;
# 看预留给超级用户的数据库连接数目
show superuser_reserved_connections;
或者
#查找超级用户预留的连接数
SELECT name,context,unit,setting,boot_val,reset_val FROM sys_settings WHERE name in('superuser_reserved_connections');
准确来说,普通用户可建立的最大并发连接的数是 max_connections - superuser_reserved_connections
# 查看当前已用连接数
select count(*) from sys_stat_activity;
以上是关于人大金仓最大连接数的主要内容,如果未能解决你的问题,请参考以下文章
DataGrip连接人大金仓数据库(kingbase)详细教程超详细
炫“库”行动☀️人大金仓数据库管理系统☀️ - SQL&JDBC&整合MyBatis框架&登录注册Demo实现(持续更新中......)