如何計算 PostgreSQL 的 max_connections 和 pgbouncer 的 default_pool_size?
有什麼規則或東西可以用來計算
max_connections
,default_pool_size
和的好數字max_client_conn
嗎?預設值很奇怪。PostgreSQL 預設為 max_connections=100,而 pgbouncer 預設為 default_pool_size=20。default_pool_size 不應該總是高於 max_connections 嗎?否則,有什麼意義呢?我認為 pgbouncer 是為了讓我們通過降低成本(通過重用 PostgreSQL 的連接)來處理更多的連接。我很困惑。
我正在尋找類似於PostgreSQL’s wiki中的建議,例如“這個參數應該是你記憶體的 ~50%”。
我記得有一個 MySQL 電子表格可以讓你計算這些參數。為 PostgreSQL/pgbouncer 提供類似的東西會很棒。
首先,請閱讀我們關於容量規劃的規範問題。
您要求的具體建議是容量規劃建議,您必須針對您的特定環境自行解決。
其次,你看錯了。
您擁有的記憶體量(或任何其他資源)並不決定您設置的連接數,您需要的連接數決定了您必須購買的伺服器有多強大。手冊
中非常詳細地 給出了每個連接的資源要求,並在您連結到的 Wiki 上進行了討論。弄清楚您的環境需要什麼(或做出有根據的猜測),並確保您要執行的硬體可以處理您要扔給它的東西。具體來說:連接限制和池大小,您應該有“足夠”的連接來滿足您的應用程序的要求 - 無論是在單個伺服器上還是通過池/彈跳器。
“足夠”是一個相對數字:建立(並不斷重複使用)一個連接的應用程序只需要一個連接。為每個登錄的最終使用者建立連接的應用程序需要與其擁有的使用者一樣多的數據庫連接。
Postgres 的預設值和預設值是
pgbouncer
明智的:
- 100 個數據庫連接對於將 Postgres 投入環境的典型人員來說已經很多了。
開發人員可能不需要超過 10 個。其他任何人都知道足以增加數量。
- 每個 DB 池有20 個連接
pgbouncer
意味著您可以獲得 4 個指向一台伺服器的池,而不會超出預設的 Postgres 連接限制。可以有多個資源池
pgbouncer
指向一個後端數據庫,並且您總是希望後端伺服器上有一些可用的連接。如果預設值不適合您的環境,您應該更改它們。
請記住,池連接並不意味著“總是佔用每個可用的數據庫連接”。正如您所指出的,重點是
重用連接。此處的效率提升並不要求您綁定每個可用的連接,只需要您不要斷開連接、重新連接、重新協商 SSL、重新驗證數據庫以及每次都重新執行連接設置查詢。
pgbouncer