记处理PostgreSQL连接太多的问题
开发同事在自己的windos电脑搭建了PostgreSQL,但是应用程序连接数据库,出现“数据库的连接太多了**”。由于未设置详细的log内容;只获取到这个信息。
先查看实例的max_connections;
show max_connections;
select name, setting, context, source from pg_settings where name = 'max_connections'
结果是:500
查看实例的连接数
--获取当前实例的总的连接数
select count(1) from pg_stat_activity ;
--获取当前实例的空闲连接数
select count(1) from pg_stat_activity where state = 'idle';
结果是:
- 总的连接数:107
- 空闲的连接数:101
因为应用程序连接是使用jdbc的连接池;需要提前申请连接资源。但问题是连接数远远少于500。
验证下参数是否生效
在9.5以后的版本;可以采用
select * from pg_file_settings where error is not null;
若没有记录;则表明没有失效的参数
通过任务管理器查看内存使用情况
内存使用率不过20%;可以排除不是申请连接时内存不够
查看数据库的连接数是否限制
通过pg_databases可以查看
select datname,datconnlimit from pg_database;
查看结果;问题出在这;开发在创建数据库加了CONNECTION LIMIT = 100;
解决方法:
ALTER DATABASE ** CONNECTION LIMIT 300;
扩展:
- 当然也可以要求开发申请连接资源降低,也可以缓解。
- 通过结束 idle 会话治不了根本。kill掉之后会继续申请。
SELECT pg_terminate_backend(pid) FROM pg_stat_activity where state = 'idle';