Sql-Server

我可以有一個未被發現的死鎖嗎?

  • September 17, 2021

第一次在伺服器上執行sp_whoisactive時,我遇到了一些意想不到的事情:

在此處輸入圖像描述

兩個會話已經執行了 13 天,但它們似乎都相互阻塞。看看sys.dm_tran_locks

在此處輸入圖像描述

阻塞程序門檻值設置的配置值為 10 秒。正在通過死鎖監視器在伺服器上成功解決其他死鎖。

參數資訊@get_locks

<Database name="DB1">
 <Locks>
   <Lock request_mode="S" request_status="GRANT" request_count="1" />
 </Locks>
 <Objects>
   <Object name="TBL1" schema_name="dbo">
     <Locks>
       <Lock resource_type="OBJECT" request_mode="IX" request_status="GRANT" request_count="1" />
       <Lock resource_type="PAGE" page_type="*" index_name="PK__TBL1__3214EC27326C5B6A" request_mode="U" request_status="GRANT" request_count="1" />
       <Lock resource_type="PAGE" page_type="*" index_name="PK__TBL1__3214EC27326C5B6A" request_mode="U" request_status="WAIT" request_count="1" />
     </Locks>
   </Object>
 </Objects>
</Database>


<Database name="DB1">
   <Locks>
       <Lock request_mode="S" request_status="GRANT" request_count="1" />
   </Locks>
   <Objects>
       <Object name="TBL2" schema_name="dbo">
           <Locks>
               <Lock resource_type="OBJECT" request_mode="Sch-S" request_status="GRANT" request_count="2" />
           </Locks>
       </Object>
       <Object name="TBL1" schema_name="dbo">
           <Locks>
               <Lock resource_type="OBJECT" request_mode="IX" request_status="GRANT" request_count="5" />
               <Lock resource_type="PAGE" page_type="*" index_name="PK__TBL1__3214EC27326C5B6A" request_mode="U" request_status="GRANT" request_count="33701" />
               <Lock resource_type="PAGE" page_type="*" index_name="PK__TBL1__3214EC27326C5B6A" request_mode="U" request_status="WAIT" request_count="1" />
           </Locks>
       </Object>
   </Objects>
</Database>

我偶爾會看到“未檢測到的死鎖”一詞,但我對它們沒有任何直接經驗。我的問題是:

  1. 這可能是未檢測到的死鎖的範例嗎?如果沒有死鎖監視器執行緒的干預,我看不出這種情況是如何解決的,但由於某種原因,這種情況還沒有發生。
  2. 除了更新到最新的 CU 並希望問題不再發生之外,還有什麼可做的嗎?伺服器目前在 2017 CU10 上,我知道這有點過時了。

來自David Browne留下的評論- Microsoft

“未檢測到的死鎖”通常是指“無法檢測到的死鎖”,例如,會話被 SQL Server 鎖阻塞,而另一個會話在客戶端應用程序中被阻塞,或者會話呼叫xp_cmdshell其執行連接到數據庫的程序並被阻塞由會話等待完成xp_cmdshell。沒有自動解決的普通死鎖看起來像一個錯誤。

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