將 server_lifetime 與 PgBouncer 一起使用有什麼意義?
我
server_lifetime
在 PgBouncer 配置中找到了選項,我試圖弄清楚我們的情況是否真的需要它。https://pgbouncer.github.io/config.html
pooler 將嘗試關閉連接時間超過此時間的伺服器連接。將其設置為 0 意味著連接將只使用一次,然後關閉。
$$ seconds $$ 預設值:3600.0
關閉和重新打開連接是什麼感覺?
為什麼醫生說“會嘗試”?PgBouncer 可能會在此操作中失敗嗎?
這是 pgBouncer 或任何池化軟體的基礎 - pgBouncer 的主要工作是重用 PostgreSQL 連接。對於短會話創建大量連接可能非常昂貴 - 使用快速查詢。當可以為更多客戶端共享(重用)物理連接時,您可以獲得更快的執行速度。
pgbouncer 和類似軟體的第二個重要作用是防止過載。PostgreSQL 沒有內部池——任何連接的使用者都可以執行任何 SQL。有很多應用程序具有長時間的空閒連接。這些應用程序需要很高的
MAX_CONNECTION
數量。隱藏的假設是這些連接上的低活動。但有時可能會有相當高的活動,對新連接的請求非常高,並且數據庫可能會過載。MAX_CONNECTION
應該是大約 10 個 CPU 核心。值不足並不能保護數據庫免於過載並以失敗告終。對於這些應用程序可以是 pgbouncer 安全解決方案 - 該軟體能夠為許多客戶端共享物理空閒連接。強制將
server_lifetime
分配的源返回給作業系統。一些源(如記憶體)是內部管理的,並且(通常)較新地返回到作業系統。一些記憶體昂貴的操作可能需要大量記憶體。第一次從系統分配此記憶體。下次這個記憶體只由 PostgreSQL 管理——它更便宜、更快。但有時它也可能無效。pgbouncer 不知道哪個程序已預先分配記憶體 - 有時記憶體可以更好地使用。保障措施是server_lifetime
。一小時是保守值 - 並且可以更短 - 10分鐘。pgbouncer 僅關閉非活動連接 - 因此,如果任何客戶端使用該連接:打開的事務、長時間的活動命令、..server_lifetime
無法應用。