Postgresql

將 server_lifetime 與 PgBouncer 一起使用有什麼意義?

  • April 27, 2017

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無法應用。

引用自:https://dba.stackexchange.com/questions/172206