检查应用连接数
如果应用程序与数据库的连接数超过最大值,则新的连接无法建立。建议每天检查连接数,及时释放空闲的连接或者增加最大连接数。
操作步骤
- 以操作系统用户omm登录数据库主节点。
- 使用如下命令连接数据库。
1. gsql -d postgres -p 8000
postgres为需要连接的数据库名称,8000为数据库主节点的端口号。
连接成功后,系统显示类似如下信息:
``` 1. gsql((openGauss x.x.x build f521c606) compiled at 2021-09-16 14:55:22 commit 2935 last mr 6385 release) 2. Non-SSL connection (SSL connection is recommended when requiring high-security) 3. Type "help" for help.
- openGauss=# ```
- 执行如下SQL语句查看连接数。
1. openGauss=# SELECT count(*) FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;
显示类似如下的信息,其中2表示当前有两个应用连接到数据库。
1. count
2. -------
3. 2
4. (1 row)
4. 查看现有最大连接数。
1. openGauss=# SHOW max_connections;
显示信息如下,其中200为现在的最大连接数。
1. max_connections
2. -----------------
3. 200
4. (1 row)
异常处理
如果显示的连接数接近数据库的最大连接数max_connections,则需要考虑清理现有连接数或者增加新的连接数。
- 执行如下SQL语句,查看state字段等于idle,且state_change字段长时间没有更新过的连接信息。
1. openGauss=# SELECT * FROM pg_stat_activity where state='idle' order by state_change;
显示类似如下的信息:
1. datid | datname | pid | sessionid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | xact_start | query
2. _start | state_change | waiting | enqueue | state | resource_pool | query_id | query | connection_info | unique_sql_id
3. -------+----------+-----------------+-----------------+----------+---------+------------------------+-------------+-----------------+-------------+-------------------------------+------------+---------------
4. ----------------+-------------------------------+---------+---------+-------+---------------+----------+----------------------------------------------------------+-----------------+---------------
5. 16200 | postgres | 140556276659968 | 140556276659968 | 10 | omm | statement flush thread | | | | 2022-01-10 20:31:19.679721+08 | |
6. | 2022-01-10 20:31:19.679741+08 | f | | idle | default_pool | 0 | | | 0
7. 16200 | postgres | 140556569540352 | 140556569540352 | 10 | omm | cm_agent | 10.244.2.24 | | 50522 | 2022-01-10 20:31:15.582877+08 | | 2022-01-10 20:
8. 31:20.612987+08 | 2022-01-10 20:31:20.616886+08 | f | | idle | default_pool | 0 | select * from disable_conn('polling_connection', '', 0); | | 0
9. 16200 | postgres | 140556602111744 | 140556602111744 | 10 | omm | cm_agent | 10.244.2.24 | | 50476 | 2022-01-10 20:31:09.92659+08 | | 2022-03-09 10:
10. 47:40.948749+08 | 2022-03-09 10:47:40.948891+08 | f | | idle | default_pool | 0 | show synchronous_standby_names; | | 0
11. 16200 | postgres | 140556637828864 | 140556637828864 | 10 | omm | cm_agent | 10.244.2.24 | | 50472 | 2022-01-10 20:31:08.921173+08 | | 2022-03-09 10:
12. 47:41.131224+08 | 2022-03-09 10:47:41.13128+08 | f | | idle | default_pool | 0 | show most_available_sync; | | 0
13. (4 rows)
2. 释放空闲的连接数。
查看每个连接,并与此连接的使用者确认是否可以断开连接,或执行如下SQL语句释放连接。其中,pid为上一步查询中空闲连接所对应的pid字段值。
1. openGauss=# SELECT pg_terminate_backend(140390132872976);
显示类似如下的信息:
1. openGauss=# SELECT pg_terminate_backend(140390132872976);
2. pg_terminate_backend
3. ----------------------
4. t
5. (1 row)
如果没有可释放的连接,请执行下一步。 3. 增加最大连接数。
1. gs_guc set -D /gaussdb/data/dbnode -c "max_connections= 800"
其中800为新修改的连接数。 4. 重启数据库服务使新的设置生效。
说明: 重启openGauss操作会导致用户执行操作中断,请在操作之前规划好合适的执行窗口。
1. gs_ctl restart -D /gaussdb/data/dbnode
说明: 重启openGauss操作会导致用户执行操作中断,请在操作之前规划好合适的执行窗口。