记处理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';
posted @ 2021-04-24 11:02  lottu  阅读(2895)  评论(0编辑  收藏  举报