Sql-Server-2019

Sproc 完成後打開 Windows 導致鎖定

  • January 31, 2021

我有一個被阻止的查詢。Ran sp_whoisactive @ get_locks=1 並確定了阻塞查詢及其所有者。結果表明該表已被鎖定超過四個小時。開發人員表示這是她執行的儲存過程,並在 21 秒內完成。她仍然為儲存過程打開了 SSMS 視窗。她一關上窗戶,鎖就被打開了。我從來沒有見過一個完整的儲存過程僅僅因為視窗沒有關閉而保留鎖。我進行了研究,但找不到與此問題類似的任何內容。儲存過程基本上將記錄選擇到臨時表中,然後更新另一個表並在檢測到錯誤地址時設置一個標誌。這是標準行為嗎?是否有可以更改的設置以防止這種情況發生?

這是 SQL Server 2019。SSMS v 18。

這是標準行為嗎?

否。在儲存過程執行之前啟動了事務,或者會話在 SET IMPLICIT_TRANSACTIONS ON 的情況下執行,可以將其設置為 SSMS 查詢視窗的預設值。

在任何情況下,如果會話在沒有查詢執行的情況下被阻塞,它就有一個打開的事務。

大衛所說的,還有,當視窗關閉時,連接將終止,打開的事務將回滾。該 SP 完成的任何工作,所有由它寫入的行,都將失去。

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