MSSQLSERVER_1205
適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體
詳細資料
屬性 | 值 |
---|---|
產品名稱 | SQL Server |
事件識別碼 | 1205 |
事件來源 | MSSQLSERVER |
元件 | SQLEngine |
符號名稱 | LK_VICTIM |
訊息文字 | 交易 (處理序識別碼 %d) 在 %.*ls 資源上被另一個處理序鎖死,並已被選為死結的犧牲者。 請重新執行該交易。 |
說明
資源會以不同交易的衝突順序存取,導致 死結。 例如:
-
Transaction1
更新Table1.Row1
,而 Transaction2 會更新Table2.Row2
-
Transaction1
嘗試更新Table2.Row2
但遭到封鎖,因為Transaction2
尚未認可且尚未釋放其鎖定 - Transaction2 現在會嘗試更新
Table1.Row1
但遭到封鎖,因為Transaction1
尚未認可且尚未釋放其鎖定 - 發生死結是因為
Transaction1
正在等候Transaction2
完成,但Transaction2
正在等候Transaction1
完成。
系統會偵測此死結,並選擇其中一個交易作為 受害者。 然後,它會發出此錯誤訊息,回復受害者的交易。 如需詳細資訊,請參閱 死結。
用戶動作
死結在大部分情況下與應用程式相關的問題,並要求應用程式開發人員進行程式代碼變更。 收到錯誤 1205 的其中一種方法是再次執行查詢。 如需詳細資訊,請參閱適用於開發人員的 死結模擬器應用程式:如何在您的應用程式中處理 SQL 死結問題。
您也可以修改應用程式,以避免死結。 根據同時執行的作業而定,選擇作為犧牲者的交易可以重試並可能成功。
若要防止或避免發生死結,請考慮讓所有交易以相同順序存取數據列(Table1
,然後 Table2
)。 如此一來,雖然可能會發生封鎖,但會避免死結。