
我有一個 PostgreSQL 9.4 伺服器,它似乎限制連線數少於我在 max_connections 中定義的數量。
我將 max_connections 設定為 300。
SHOW max_connections;
max_connections
-----------------
300
然而,我發現,一旦我的活動連接數達到 100,新連接就開始超時,測量方法為SELECT count(*) from pg_stat_activity;
只要該數字低於 100,新連接就可以工作。一旦達到 100,新連線就會失敗:PG::ConnectionBad: could not connect to server: Connection timed out
(Ruby pg 函式庫)
超級用戶連線似乎有一個例外(即我透過 PgAdmin 連線),因為這樣我可以超過 100 個閾值,儘管不使用超級用戶的應用程式會繼續逾時。
我不知道到底是什麼根本原因。
一些配置設定:
max_connections = 300
superuser_reserved_connections = 2
shared_buffers = 1024MB
effective_cache_size = 2048MB
work_mem = 8MB
maintenance_work_mem = 256MB
我嘗試對這些值進行一些修改,但沒有任何效果。
其他詳情:
- Ubuntu 14.04 64 位
- 4GB 易節點 VPS
- PostgreSQL 9.4.1
- 在 PostgreSQL 9.2 上使用基本上相同的配置沒有出現此問題。
- 資料庫是透過 pg_dumpall 從 Postgres 9.2 遷移的
- 記憶體使用似乎不是問題,
free
顯示 2.1 GB 可用空間,3.5 GB 包括緩衝區/快取。 - 連接針對許多不同資料庫的許多不同角色,沒有單一資料庫具有超過 5 或 6 個活動連接,並且每個資料庫都由自己的單獨角色存取。似乎沒有違反單一資料庫或角色的任何連接限制。
答案1
您是否也提高了內核最大段大小?
嘗試:
sysctl -w kernel.shmmax=1258291200