MSSQLSERVER_1205
適用于: SQL Server Azure 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 執行完成,因此發生死結。
系統會偵測到此死結,並選擇其中一個涉及的交易作為「犧牲者」。 然後,它會發出此錯誤訊息,回復犧牲者的交易。 如需詳細資訊,請參閱 Deadlocks。
使用者動作
在大部分情況下,死結是應用程式相關問題,而且需要應用程式開發人員進行程式碼變更。 收到錯誤 1205 的其中一種方法是再次執行查詢。 如需如何重試的範例,請參閱此部落格 - 處理死結並重新執行查詢: 適用于開發人員的死結模擬器應用程式:如何在您的應用程式中處理 SQL 死結問題
您也可以修訂應用程式以避免死結。 您可以重試系統選擇做為犠牲者的交易,而且該交易可能會成功 (依據同時執行的作業而定)。
若要防止或避免發生死結,請考慮讓所有交易以相同順序存取 Table1 (的資料列,然後 讓 Table2) 。 如此一來,雖然可能會發生封鎖,但會避免死結。