赞
踩
出现该问题的原因是因为当前的数据库连接已经达到阈值,也就是可连接数已经被占用满,此时数据库是会拒绝外部的请求的,包括第三方客户端例如Navicat以及数据库终端,请求会报错如下:
首先就是先要释放出可用连接,不然连终端都连不上
1、查出数据库连接进程
ps -ef | grep postgres
2、干掉空闲的僵尸连接
上述查出的信息如下:
接下来对部分空闲状态的连接进程进行清理,kill 掉部分的僵尸连接来释放连接占用
kill 进程ID
释放出连接占用后我们进行 psql 连接终端
可以看到已经正常连接上了,第三方客户端也是一样可以的,这只是临时的解决方法,最终需要解决的还是数据库的连接方面配置以及外部连接的优化
适当扩大数据库的最大连接数
找到数据库配置文件 postgres.conf
// 适当扩大最大连接数比如 200 --> 500
max_connections = 200
max_connections = 500
也可以配置 idle_in_transaction_session_timeout
或者配置 idle_session_timeout
这两种配置都属于空闲连接超时配置,由于我使用到的是Greenplum数据库,且实例数据库PostgreSQL版本是9.4.26版本的,版本比较老,貌似不支持这两种参数,没有过多深究
1、后端程序连接数据库记得即用即关,记得close
2、连接池进行一些适配性调整配置,空闲超时连接关闭
3、可以编写脚本查出 idle 状态的连接,配合后端程序逻辑定时清理
// 以下是查数据库连接的 state 代表状态
SELECT datname, pid, application_name, state
FROM pg_stat_activity;
终语:以上为作者本人实际碰到的一些问题和解决方法,有错误和不到的地方还请多多指教
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。