zoukankan      html  css  js  c++  java
  • 记处理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';
    
  • 相关阅读:
    RFC3261--sip
    windows中.msc文件详解
    tcpdump详细用法
    2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest
    2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest
    2017 CERC
    2017 SWERC
    2017 NWERC
    2017 NEERC
    2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest, qualification stage
  • 原文地址:https://www.cnblogs.com/lottu/p/14696437.html
Copyright © 2011-2022 走看看