本文介紹如何通過控制台查看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。
操作步驟
- 訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
在左側導覽列,選擇 。
頁面介紹
死結數量概覽
可分時段查看近期產生的死結數量。
死結變化趨勢
展示某個時間段內發生的死結類型。您可以執行如下操作:
選擇起始日期和結束日期,單擊尋找顯示指定時間段的死結資訊。
說明指定的時間間隔不能超過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)用戶端開啟並查看。