Pgbouncer

query_wait_timeout 錯誤的 PgBouncer 日誌記錄詳細資訊

  • March 11, 2020

關於 PgBouncer 日誌中的此類錯誤:

2020-03-10 03:46:01.730 EDT [25305] LOG C-0xa5cf00: testdb/testdb_user@127.0.0.1:49214 closing because: query_wait_timeout (age=120s)
2020-03-10 03:46:01.730 EDT [25305] WARNING C-0xa5cf00: testdb/testdb_user@127.0.0.1:49214 pooler error: query_wait_timeout

是否有可能查看(或記錄)觸發錯誤的查詢?此錯誤的最常見原因是什麼?停止的伺服器,繁忙的伺服器?

更新:來自 PostgreSQL 的日誌文件在 2020-03-10 03:46:01 沒有顯示任何錯誤

您共享的日誌消息不是由於查詢錯誤。相反,這是由於 pgbouncer 客戶端會話正在等待伺服器連接,但等待時間超過 2 分鐘。換句話說,池中的所有真實連接都已使用,並且某些會話等待大約 2 分鐘以獲得對數據庫執行查詢的機會。造成這種情況的因素可能有很多:

  1. 會話級池——您可能有多個 pgbouncer 會話,它們獲得與數據庫的真實連接,但它們處於空閒狀態並且永遠不會釋放回池的連接。然後,最新的會話只是等待並且永遠沒有機會執行它的查詢(並且query_wait_timeout發生,並且新的 pgbouncer 會話被引導)
  2. 事務級池,池大小太小——您可能只有來自應用程序的大量連接,並且它們花費大量時間執行事務,因此任何新會話都在等待事務完成,但是 2 分鐘時間不夠。
  3. query_wait_timeout太小——您可能只有很多長時間執行的查詢(檢查pg_stat_activity任何仍在執行的舊查詢或空閒事務)

您所看到的可能還有其他一些可能的原因,但這些只是我想到的幾個。

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