0
我是SQL Server DBA的新手,每天至少有一次在使用Merge語句的SQL Server 2012服務器中遇到死鎖問題。在合併聲明中沒有使用NOLOCK
,UPDLOCK
,HOLDLOCK
等子句。這是一個多用戶環境,Biztalk讀取xml並將數據保存到SQL Server中。SQL Server死鎖 - 需要修復
每分鐘,Biztalk會讀取300個xml消息。由於它是一臺生產服務器,我不能在沒有研究的情況下執行任何操作,但我對如何解決這個問題一無所知。最近我遇到了兩個xml消息,它試圖更新表中的數據並嘗試使用相同的索引併發生錯誤。任何人都可以幫助我解決這個問題嗎?
如果您可以獲得可重現的案例,請在重現它的同時運行SQL跟蹤,確保跟蹤所有'死鎖'事件。這可以爲您提供關於SQL究竟是死鎖的信息,以及確切的資源。死鎖幾乎總是由一個線程在資源A和B之後產生,而另一個線程在B之後,然後是A.有時候,您可以添加或刪除索引以消除死鎖,但有時需要修改代碼以始終獲取資源訂購。 – pmbAustin
我採取了僵局追蹤並瞭解問題所在。然而,僵局並不總是發生,但往往來自合併聲明,這使我很難作出任何決定。 – aprasy
死鎖圖應顯示正在死鎖的確切項目(例如,將識別特定索引的對象ID)。這就是你需要開始的地方。將會有一個非常大的ID,你可以使用這個SQL來解碼它所指的內容:SELECT hobt_id,object_name(p。[object_id]),index_id FROM sys.partitions p WHERE hobt_id = 72057594060734464 - replace with您的特定鎖ID – pmbAustin