記處理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';


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM