Postgresql

lock_timeout 和 deadlock_timeout 有什麼區別?

  • April 8, 2020

lock_timeout 和 deadlock_timeout 之間有什麼作用?

發生 lock_timeout 而不導致死鎖超時的原因是什麼。我無法從數據庫的角度考慮場景?

活鎖(由 處理)和死鎖之間的區別在於lock_timeout後者保證永遠不會結束,因為兩個(或更多)會話正在相互等待。

活鎖總是可以結束的——一旦鎖定資源的會話結束數據庫事務,它就會結束。對於死鎖,這是不可能的,因為所有涉及的事務都被阻塞並且無法繼續。

預設情況下,數據庫通過終止其中一個涉及的事務來解決死鎖,但它不會中斷活鎖。

例如,如果一個數據庫會話需要等待另一個會話,因為它需要具有相同的鎖,這只是一個鎖等待問題:您使用 lock_timeout。

死鎖是等待鎖問題的一種非常特殊的情況,其中多個會話相互等待並且無法工作:數據庫決定終止其中一個涉及的事務以解決此問題,以便至少一個數據庫會話不再被阻塞。參數 deadlock_timeout 是

在檢查是否存在死鎖條件之前等待鎖定的時間量(以毫秒為單位)。

死鎖是發生頻率較低的鎖定情況的一種特殊情況(通常是由於應用程式碼對相同的數據庫對象進行了鎖定,但順序不同)。

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