VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

检查应用连接数

如果应用程序与数据库的连接数超过最大值,则新的连接无法建立。建议每天检查连接数,及时释放空闲的连接或者增加最大连接数max_connections

操作步骤

1、以安装Vastbase的操作系统用户(以vastbase为例)登录数据库主节点。

2、使用如下命令连接数据库,vastbase为需要连接的数据库名称;5432为数据库主节点的默认端口号。

vsql -d vastbase -p 5432

连接成功后,系统显示类似如下信息:

vsql ((Vastbase G100 V2.2 (Build 10) Release) compiled at 2023-07-02 21:53:11 commit 14250 last mr  )
Non-SSL connection (SSL connection is recommended when requiring high-security)Type "help" for help.

vastbase=#

3、执行如下SQL语句查看连接数。

SELECT count(*) FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;

显示类似如下的信息,返回结果表示当前有21个应用连接到数据库。

count
-------
  21
(1 row)

4、查看现有最大连接数。

SHOW max_connections;

显示信息如下,其中200为现在的最大连接数。

max_connections 
-----------------
 200
(1 row)

异常处理

如果显示的连接数接近数据库的最大连接数max_connections,则需要考虑清理现有连接数或者增加新的连接数。

1、执行如下SQL语句,查看state字段等于idle,且state_change字段长时间没有更新过的连接信息。

SELECT * FROM pg_stat_activity where state='idle' order by state_change;

显示类似如下的信息:

datid | datname  |      pid       |   sessionid    | usesysid | usename  |    application_name    | client_addr | client_hostname | client_port |         backend_start         | xact_start | query_start
    |         state_change          | waiting | enqueue | state | resource_pool |     query_id      | query | connection_info | unique_sql_id | trace_id
   -------+----------+----------------+----------------+----------+----------+------------------------+-------------+-----------------+-------------+-------------------------------+------------+------------
   -+-------------------------------+---------+---------+-------+---------------+-------------------+-------+-----------------+---------------+----------
    16475 | postgres | 47429099063040 | 47429099063040 |       10 | vastbase | statement flush thread |             |                 |             | 2022-08-02 17:11:38.109267+08 |            |
    | 2022-08-02 17:11:38.109358+08 | f       |         | idle  | default_pool  |                 0 |       |                 |             0 |
    16475 | postgres | 47429039163136 | 47429039163136 |       10 | vastbase | WDRSnapshot            |             |                 |             | 2022-08-02 17:11:38.108251+08 |            |
    | 2022-08-03 09:22:30.404077+08 | f       |         | idle  | default_pool  | 52917295621603328 |       |                 |             0 |
   (2 rows)

2、释放空闲的连接数。

查看每个连接,并与此连接的使用者确认是否可以断开连接,或执行如下SQL语句释放连接。其中,pid为上一步查询中空闲连接所对应的pid字段值,以47429099063040为例。

SELECT pg_terminate_backend(47429099063040);

显示类似如下的信息,t表示成功终止一个后台线程:

pg_terminate_backend
----------------------
t
(1 row)

如果没有可释放的连接,请执行下一步。

3、增加最大连接数并重启生效。

  • 针对单机Vastbase:

    vb_guc set -D /vastbase/data -c "max_connections= 120"
    

    其中:

    • /vastbase/data为postgresql.conf配置文件所在的目录。
    • 120为新修改的连接数。
  • 针对HAS V1.2 for Vastbase集群:

    (1)执行如下操作:

    /vastbase/has/hasctl -c /vastbase/has/vastbase.yml edit-config
    

    (2)修改以下参数后保存退出:

    max_connections=120
    

    (3)按y确认应用修改:

    Apply these changes?[y/N]:y
    Configuration changed
    
    • 示例中/vastbase/has/为高可用集群has所在的目录。

    • edit-config操作需要重启高可用服务has。

    • 如果直接修改vastbase.yml文件,重启之前需要清除dcs的缓存。

4、使新的参数生效。

  • 针对单机Vastbase:

    (1)使用安装Vastbase的操作系统用户(以vastbase为例)登录执行:

    vb_ctl reload 
    

    (2)使用vsql工具连接到数据库。

    vsql -r
    

    (3)查看最大连接数:

    show max_connections;
    
  • 针对Vastbase一主两备的集群,三个节点都重启高可用生效:

    (1)使用root用户执行如下命令:

    systemctl restart has
    

    (2)切换到安装Vastbase的操作系统用户下:

    su - vastbase
    

    (3)使用vsql工具连接至数据库。

    vsql -r
    

    (4)查看最大连接数:

    show max_connections;