Postgresql
死鎖最佳實踐
我們正在執行 Postgres 9.3,並且偶爾會遇到死鎖問題。目前有人注意到並將手動終止程序。當它們發生時,是否有處理這些問題的最佳實踐?我知道有一個
statement_timeout
,但是我讀到lock_timeout
的deadlock_timeout
大多數地方都表明您不想在postgres.conf
文件中設置它。只是想看看是否有典型/最佳實踐方法。看起來將 deadlock_timeout 設置為 10 分鐘就足夠了,但我想確保我沒有錯過一些關鍵的東西,為什麼這是一個壞主意。
10 分鐘是一個極高的設置
deadlock_timeout
,這也可以解釋為什麼你甚至有機會手動干預。預設值為 1 秒,手冊建議:預設值為一秒 (
1s
),這可能是您在實踐中想要的最小值。在負載很重的伺服器上,您可能需要提升它。理想情況下,該設置應該超過您的典型事務時間,以提高在服務員決定檢查死鎖之前釋放鎖的機率。只有超級使用者可以更改此設置。我預計您的典型交易不會超過10 分鐘。如果您有長時間執行的查詢,請嘗試 20 秒。
此處還記錄了對死鎖的最佳防禦:
防止死鎖的最佳方法通常是通過確保所有使用數據庫的應用程序以一致的順序獲取多個對像上的鎖來避免死鎖。
因此,如果您這樣做,就不會出現死鎖。