2012-04-28 244 views
5

我一直在嘗試配置PgPool來接受約150的請求。Postgres服務器被配置爲只接受100個連接。超過100的任何東西都需要被PgPool彙集。我似乎不明白。我只需要PgPool排隊請求,我目前的配置不這樣做。從我的JMeter測試中,當我嘗試連接超過100時,postgres給我一個錯誤,說PSQL錯誤:sorry, too many clients一個很好的PgPool II配置

我只已配置PGPool使用以下參數:

listen_address = 'localhost' 
port = 9999 
backend_hostname0 = 'localhost' 
backend_port0 = 5432 
num_init_children = 100 
max_pool = 4 
child_life_time =120 
child_max_connections = 0 
connections_life_tome = 120 
client_idle_limit = 0 

由於我只需要PgPool到隊列的額外連接的請求,在上述配置是否正確? 請告知正確的配置。

+0

您是否在應用程序中定位了pgpool實例,而不是直接連接到Postgresql? – 2012-04-28 09:09:25

+0

我通過PGPool端口9999連接到postgres服務器'jdbc:postgresql:// localhost:9999/dbname?user = username&password = passwordofuser' – 2012-04-28 09:45:56

回答

2

首先要弄清楚你想要的最大池大小。當活動連接的最大數量在((2 *內​​核數量)+有效主軸數量)附近時,PostgreSQL的性能(無論是吞吐量還是延遲)通常都是最好的。有效的主軸數量可能會非常棘手 - 例如,如果您的活動數據集完全緩存,則將其計爲零。不要將超線程中的任何額外線程計算爲此計算的核心。另請注意,由於網絡延遲問題,您可能需要一個略大於計算數量的池來保持連接數處於活動狀態。您可能需要做一些基準測試以找到適合您的硬件和工作負載的最佳位置。

您需要調整的設置是child_max_connections,其中num_init_children保持小於或等於此值。

+0

2 *內核數量+有效主軸數量??爲num_init_children參數?你能舉個例子嗎?我不知道我的理解.. – 2012-04-30 06:25:52

+0

假設你有一個超線程四核處理器。這是四個內核,因此您可能會從多達8個活動數據庫連接中受益。比方說,你有一個六驅動器RAID 10的數據。如果您完全緩存,則可能不會添加任何內容,因爲驅動器未被用於大量隨機讀取。如果你是磁盤綁定的,那麼你把它算爲6,讓你連接14個。如果部分緩存,有效的緩存大小可能介於兩者之間。從那裏開始,測試一下你的工作量稍大一點的小池。 – kgrittn 2012-04-30 12:21:34

+0

這個PgPool wiki的聲明幫助我: - 總之,max_pool,num_init_children,max_connections,superuser_reserved_connections必須滿足以下公式: max_pool * num_init_children <=(max_connections - superuser_reserved_connections)(不需要取消查詢)。我改變配置'listen_address = '本地主機' 端口= 9999 backend_hostname0 = '本地主機' backend_port0 = 5432 num_init_children = 25 max_pool = 4 child_life_time = 120個 child_max_connections = 100 connections_life_tome = 120 client_idle_limit = 25' – 2012-05-01 06:14:48

4

pgpool中的'child_max_connections'不是允許連接到數據庫的最大值。這是在終止和重新啓動之前,池連接可以使用的次數。它在那裏回收連接線程並停止內存泄漏。

max_pool x num_init_children的公式描述了pgpool對Postgresql的最大連接數。顯然,這需要小於postgresql中設置的'max_connections',否則pgpool會將數據庫標記爲不可用的後端。如果您有一些數據庫連接保留給管理員使用,則需要進一步減少pgpool連接的數量。

所以,我說的是公式中的'max_connections'是在postgresql.conf中設置的參數。在上面的註釋中將'child_max_connections'設置爲100只意味着pgpool連接被關閉,並且每使用100次就重新打開。