Sql-Server

將 DEADLOCK_PRIORITY 設置為 LOW 是否會導致儲存過程執行速度變慢?

  • January 15, 2019

我有一個我編寫的儲存過程,它從數據庫中的表中刪除行。當我將在生產環境中執行儲存過程時,它將在另一個程序將行插入同一個表時執行。如果出現死鎖,我希望我的儲存過程被殺死。

在儲存過程中,我將 DEADLOCK_PRIORITY 設置為 LOW。

在我的測試環境中進行測試時,我發現設置此選項會使刪除執行速度變慢。在測試環境中,插入記錄的程序沒有執行,所以理論上不存在鎖定問題。

我發現當 DEADLOCK_PRIORITY 設置為 LOW 時,刪除約 500,000 行需要 1.5 小時。當 DEADLOCK_PRIORITY 未設置(即使用預設設置)時,刪除行只需要大約 15 分鐘。

有這種差異的原因嗎?

數據庫在測試環境中使用簡單恢復模型。(在生產環境中,它使用完全恢復模式)。

謝謝。

在這裡猜測…事務日誌文件大小

在測試系統中,當您第一次使用 LOW 進行測試時,系統很小並且增長了當您

在沒有 LOW 的情況下重新執行時,日誌文件的大小已經正確。

易於驗證:檢查 sys.sysprocesses 中的“lastwaittype”(已棄用但有用),以查看您是否提供了與 LOG 相關的等待,影響了執行 DELETE 的 SPID。

否則,請仔細檢查 2 次執行是否相同

  • 相同的數據
  • 啟用任何觸發器
  • 同上外鍵,索引
  • 外鍵級聯

另請參閱為什麼 UPDATE 比 SELECT 花費更長的時間?

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