廣州總校區(qū)切換校區(qū)
復制成功
微信號:togogoi
添加微信好友, 詳細了解課程
已復制成功,如果自動跳轉微信失敗,請前往微信添加好友
打開微信
圖片

行業(yè)新聞

SQL Server的死鎖說明

發(fā)布時間: 2023-04-19

死鎖是導致數(shù)據(jù)庫中的競爭性并發(fā)鎖,通常在多步驟事務中。

事務 A 在事務 B 完成之前無法完成,但事務 B 被事務 A 阻止。此條件也稱為循環(huán)依賴關系:事務 A 依賴于事務 B,事務 B 通過對事務 A 的依賴來關閉循環(huán)。

死鎖中的兩個事務將永遠等待,除非死鎖被外部進程打破。SQL Server 數(shù)據(jù)庫引擎死鎖監(jiān)視器定期檢查處于死鎖狀態(tài)的任務。如果監(jiān)視器檢測到循環(huán)依賴關系,它將選擇其中一個任務作為受害者,并在出現(xiàn)錯誤的情況下終止其事務。這允許其他任務完成其事務。具有因錯誤而終止的事務的應用程序可以重試該事務,該事務通常在另一個死鎖事務完成后完成。

死鎖經常與正常阻塞混淆。當一個事務請求鎖定另一個事務鎖定的資源時,請求事務將等待,直到鎖定被釋放。默認情況下,除非設置了LOCK_TIMEOUT,否則 SQL Server 事務不會超時。請求事務被阻止,而不是死鎖,因為請求事務沒有執(zhí)行任何操作來阻止擁有鎖的事務。最終,擁有事務將完成并釋放鎖,然后請求事務將被授予鎖定并繼續(xù)。死鎖幾乎可以立即解決,而阻塞理論上可以無限期地持續(xù)存在。僵局有時被稱為致命的擁抱。

死鎖是可能發(fā)生在具有多個線程的任何系統(tǒng)上的情況,而不僅僅是在關系數(shù)據(jù)庫管理系統(tǒng)上,并且可能發(fā)生在數(shù)據(jù)庫對象上的鎖以外的資源上。例如,多線程操作系統(tǒng)中的線程可能會獲取一個或多個資源,例如內存塊。如果要獲取的資源當前由另一個線程擁有,則第一個線程可能必須等待擁有該線程釋放目標資源。據(jù)說等待線程依賴于該特定資源的擁有線程。在 SQL Server 數(shù)據(jù)庫引擎實例中,會話在獲取非數(shù)據(jù)庫資源(如內存或線程)時可能會死鎖。

上一篇: MapReduce框架采用什么架構

下一篇: URL組成格式是什么

<
在線咨詢 ×

您好,請問有什么可以幫您?我們將竭誠提供最優(yōu)質服務!