代码改变世界

【磐维数据库】业务无法连接-连接数限制

2024-10-23 18:38  狂澜与玉昆0950  阅读(50)  评论(0编辑  收藏  举报

连接数介绍

江西移动现场应用侧在使用磐维数据库,做应用兼容改造时,发现程序连接报错,借此介绍下磐维数据库在连接限制上的主要手段。

方法分三层:实例级别、数据库级别和用户级别。

max_connections(全局连接数限制)

参数说明: 允许和数据库连接的最大并发连接数。此参数会影响Vastbase的并发能力。

该参数属于POSTMASTER类型参数,请参考重设参数中对应设置方法进行设置。

取值范围: 整型。

最小值为10(要大于max_wal_senders),理论最大值为262143,实际最大值为动态值,计算公式为262143 - job_queue_processes - autovacuum_max_workers - AUXILIARY_BACKENDS - AV_LAUNCHER_PROCS - max_inner_tool_connections。

默认值:200:编译安装数据库或极简安装数据库的情况下。5000:使用om安装数据库的情况下。

如果该默认值超过内核支持的最大值(在执行vb_initdb的时候判断),系统会提示错误。

设置建议:数据库主节点中此参数建议保持默认值。数据库节点中此参数建议设置为数据库主节点的个数乘以数据库主节点中此参数的值。 增大这个参数可能导致Vastbase要求更多的SystemV共享内存或者信号量,可能超过操作系统缺省配置的最大值。这种情况下,请酌情对数值加以调整。

用户限制

查看指定用户的会话连接数上限。

执行如下命令查看连接到指定用户omm的会话连接数上限。其中-1表示没有对用户omm设置连接数的限制。

openGauss=# SELECT ROLNAME,ROLCONNLIMIT FROM PG_ROLES WHERE ROLNAME='omm';
    rolname  | rolconnlimit
----------+--------------
    omm |           -1
(1 row)

修改数据库的最大连接数

ALTER DATABASE database_name 
    [ [ WITH ] CONNECTION LIMIT connlimit ];
alter database database_name CONNECTION LIMIT xx;

数据库连接数限制

查看指定数据库的会话连接数上限。

执行如下命令查看连接到指定数据库postgres的会话连接数上限。其中-1表示没有对数据库postgres设置连接数的限制。

openGauss=# SELECT DATNAME,DATCONNLIMIT FROM PG_DATABASE WHERE DATNAME='postgres'; 
datname  | datconnlimit
----------+--------------
    postgres |           -1

修改用户连接数限制:
某用户的连接数:在创建用户时由CREATE ROLE命令的CONNECTION LIMIT connlimit子句直接设定,也可以在设定以后用ALTER ROLE的CONNECTION LIMIT connlimit子句修改。

ALTER ROLE rolename CONNECTION LIMIT xx;
或者
ALTER User username CONNECTION LIMIT xx

sysadmin_reserved_connections

系统保留链接

案例分享

客户报错,连接到100之后就有问题,报错连接不上数据库。

分析思路有两个:

思路一:连接池最大连接数配置

思路二:数据库连接数限制

最后定位问题原因

3.0.0-3.0.1版本磐维存在默认用户连接数限制100的设定。
2073e9d091b3ad6b7c5c898e6ffd290.png

经过充分了解,在PanWeiDB V2.0-S3.0.0 B01与 PanWeiDB V2.0-S3.0.1 B01 中,新创建的用户的 ROLCONNLIMIT 默认为 100,可能会影响使用。

因此,需要数据库管理员或安全管理员在创建用户后,调整新建用户的 ROLCONNLIMIT 属性,方 法如下:

UPDATE PG_AUTHID SET ROLCONNLIMIT = -1 WHERE ROLNAME='XXX';

不仅是安装,升级后也需要,就是说只要是这俩版本,创建新用户之后就需要手动改一下。另外 PG_AUTHID 需要在升级模式改。

另外一种更安全的方式,不需要开启升级模式,但还是要在所有新创建的用户那里去修改。

ALTER USER username CONNECTION LIMIT -1;