全部產品
Search
文件中心

ApsaraDB RDS:死結

更新時間:Jun 19, 2024

本文介紹如何通過控制台查看RDS SQL Server資料庫中的死結及其詳細資料。

前提條件

執行個體不能是RDS SQL Server 2008 R2雲端硬碟版。

背景資訊

由於事務的特殊機制,一個事務對特定資源進行修改的同時會鎖定該資源,防止其他並發事務對該資源進行修改,以達到資料一致性的目的。

死結(DeadLock)通常是由多個事務互相競爭資源引發的。例如,事務A在修改資源A的同時,發起了對資源B的修改,而此時事務B正在修改資源B,並且對資源A發起了修改,便會引發死結。如下圖所示。死結

死結會導致受害者會話(即使用成本相對較低的SQL語句的會話)被系統終止(Kill),無法完成該會話既定的任務。

為解決上述問題,RDS提供了DeadLock統計頁面。通過查看該頁面,可快速定位元據庫中發生的多種類型的死結。死結的詳細資料頁面展示了事務開始執行的時間、會話ID、被鎖資源詳情、死結的類型等資訊,協助您定位和最佳化引發死結的問題SQL及其他異常。

死結類型

DeadLock統計頁面中包含如下5種死結類型:

  • KeyDeadlock

  • ObjectDeadLock

  • RIDDeadlock

  • PageDeadlock

  • ComplieDeadlock

關於每種死結類型的解釋,請參見Lock Granularity and Hierarchies

鎖模式

事務訪問資源時根據訪問類型的不同,會使用不同的鎖模式(LockMode)鎖定資源。包含如下幾種模式:

  • 共用鎖定(S):保證目標資源在鎖定期間只能被讀取,不能被修改。

  • 更新鎖定(U):預定對目標資源施加排它鎖(X),在資源被當前事務施加排它鎖之前,保證該資源不會被其他事務修改。

  • 排它鎖(X):保證目標資源在鎖定期間無法被其他事務訪問。

關於鎖模式的更多資訊,請參見Lock Modes

操作步驟

  1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
  2. 在左側導覽列,選擇自治服務(原CloudDBA) > 锁优化

頁面介紹

  • 死結數量概覽死結數量

    可分時段查看近期產生的死結數量。

  • 死結變化趨勢死結變化趨勢

    展示某個時間段內發生的死結類型。您可以執行如下操作:

    • 選擇起始日期結束日期,單擊尋找顯示指定時間段的死結資訊。

      說明

      指定的時間間隔不能超過30天。

    • 單擊近一天近一周近一月快捷查詢所選時間段的死結資訊。

    • 將滑鼠移動到特定的時間點,可查詢該時間點內發生的死結類型和數量。

    • 單擊趨勢圖右上方的表徵圖表徵圖,切換趨勢圖的顯示樣式或下載當前趨勢圖。

  • 死結詳細資料死結詳細資料

    單擊左邊的加號表徵圖可展示相互鎖定的會話詳情。包含如下內容:

    • LastTranStarted:事務開啟的時間。

    • SPID:開啟事務的會話ID。

    • IsVictim:該會話是否已被終止(kill)。

      說明

      SQL Server解決死結的方法是通過一個內部線程定期檢測系統死結,發現死結後,在引發死結的會話之間終止成本相對較低的會話。例如:SELECT語句的成本比UPDATE更低,系統便會優先終止使用SELECT的會話。

    • LogUsed:會話已經產生的日誌大小。單位:位元組。

    • LockMode:鎖模式。更多資訊,請參見鎖模式

    • WaitResourceDesc:當前事務等待中的資源詳情。

    • ObjectOwned:已經被鎖住的對象。

    • ObjectRequested:當前事務請求加鎖的對象。

    • WaitResource:當前事務等待中的資源。

    • HostName:當前事務的主機名稱。

    • LoginName:當前事務的帳號名稱。

    • Status:當前事務的狀態。

    • ClientApp:當前事務所使用的用戶端名稱。

    • SQLText:SQL語句詳情。

      說明

      單擊該SQL語句可開啟SQL語句視窗,單擊點擊複製可快速複製SQL語句,方便排查或回溯有問題SQL。

    單擊任意一行內容可在下方展示對應的死結關係圖。

  • 死結關係圖死結關係圖

    展示發生死結的會話之間的相互關係以及被鎖定資源的詳細資料。您可以單擊點擊下載按鈕下載XDL檔案,該檔案中記錄了對應當前死結的詳細內容,可通過SQL Server Management Studio(SSMS)用戶端開啟並查看。