處理死結

當 Microsoft SQL Server Database Engine 的執行個體選擇某交易作為死結的犧牲者時,它會結束目前的批次,將交易復原,然後將錯誤訊息 1205 傳回給應用程式。

Your transaction (process ID #52) was deadlocked on {lock | communication buffer | thread} resources with another process and has been chosen as the deadlock victim. Rerun your transaction.

因為任何提交 Transact-SQL 查詢的應用程式都可以被選為死結的犧牲者,所以應用程式應該要有錯誤處理常式來捕捉錯誤訊息 1205。如果應用程式不捕捉此錯誤,就不知道其交易已經復原而繼續執行,此時就會發生錯誤。

實作捕捉錯誤訊息 1205 的錯誤處理常式,讓應用程式得以處理死結的狀況並採取補救措施 (例如,將陷入死結的查詢自動重新送出)。藉由自動重新送出查詢,使用者就不需要知道死結曾經發生。

應用程式應該在重新送出查詢之前稍做停頓。這可讓死結中的另一筆交易有機會完成動作,並釋放它讓死結循環形成的鎖定。這樣一來,當重新送出的查詢要求鎖定時,就比較不會再度發生死結的情形。