2025年9月25日: PostgreSQL 18 釋出!
支援版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1

19.12. 鎖管理 #

deadlock_timeout (integer) #

這是等待鎖之前檢查是否存在死鎖情況的時間量。死鎖檢查相對開銷較大,因此伺服器不會在每次等待鎖時都進行檢查。我們樂觀地假設生產應用中的死鎖不常見,只會在等待鎖一段時間後才檢查死鎖。增加此值可以減少不必要的死鎖檢查所浪費的時間,但會減慢實際死鎖錯誤的報告。如果此值不帶單位指定,則視為毫秒。預設值為一秒(1s),這可能是您在實踐中想要的最小值。在負載很高的伺服器上,您可能需要增加它。理想情況下,設定應超過您典型的事務時間,以便增加鎖在等待者決定檢查死鎖之前被釋放的機會。只有超級使用者和具有適當 SET 許可權的使用者才能更改此設定。

log_lock_waits 設定為真時,此引數還決定等待多久後才會發出關於鎖等待的日誌訊息。如果您試圖調查鎖定的延遲,則可能希望將 deadlock_timeout 設定得比通常短。

max_locks_per_transaction (integer) #

共享鎖表為每個伺服器程序或預備事務提供了 max_locks_per_transaction 個物件(例如表)的空間;因此,任何時候最多可以鎖定這麼多個不同的物件。此引數限制了每個事務使用的平均物件鎖數量;只要所有事務的鎖都能裝入鎖表,單個事務就可以鎖定更多物件。這不是可以鎖定的行數;行數是無限的。預設值 64 在歷史上被證明是足夠的,但如果您有在單個事務中訪問許多不同表的查詢(例如,查詢具有許多子表的父表),則可能需要增加此值。此引數只能在伺服器啟動時設定。

執行備用伺服器時,您必須將此引數設定為與主伺服器相同或更高的值。否則,不允許在備用伺服器上執行查詢。

max_pred_locks_per_transaction (integer) #

共享謂詞鎖表為每個伺服器程序或預備事務提供了 max_pred_locks_per_transaction 個物件(例如表)的空間;因此,任何時候最多可以鎖定這麼多個不同的物件。此引數限制了每個事務使用的平均物件鎖數量;只要所有事務的鎖都能裝入鎖表,單個事務就可以鎖定更多物件。這不是可以鎖定的行數;行數是無限的。預設值 64 在歷史上被證明是足夠的,但如果您有客戶端在單個可序列化事務中訪問許多不同表的客戶端,則可能需要增加此值。此引數只能在伺服器啟動時設定。

max_pred_locks_per_relation (integer) #

這控制了在將鎖提升為覆蓋整個關係之前,單個關係可以被謂詞鎖定的頁面或元組的數量。大於或等於零的值表示絕對限制,而負值表示 max_pred_locks_per_transaction 除以該設定的絕對值。預設值為 -2,這保持了 PostgreSQL 早期版本的行為。此引數只能在 postgresql.conf 檔案或伺服器命令列中設定。

max_pred_locks_per_page (integer) #

這控制了在將鎖提升為覆蓋整個頁面之前,單個頁面上的行可以被謂詞鎖定的數量。預設值為 2。此引數只能在 postgresql.conf 檔案或伺服器命令列中設定。

提交更正

如果您在本文件中發現任何不正確、與您在使用特定功能時的實際體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。