本文介紹如何使用DAS鎖分析功能對資料庫進行死結分析,包括最近死結分析和全量死結分析。
文中圖片所示中的資料為測試案例資料,實際使用過程中,請以實際資料參數為準,包括線程ID、SQL語句等。
前提條件
目標資料庫引擎為:
最近死結分析:
RDS MySQL
自建MySQL
PolarDB MySQL版
PolarDB-X 2.0
全量死結分析:
RDS MySQL
PolarDB MySQL版
目標資料庫執行個體已接入DAS,並且接入狀態顯示為接入正常,接入方法詳情請參見接入資料庫執行個體。
已開通DAS經濟版或DAS企業版。
重要DAS經濟版和DAS企業版目前僅支援部分地區,詳情請參見各個版本支援的資料庫和地區。
開通DAS經濟版或企業版請參見開通經濟版和企業版。
最近死結分析
參數設定:執行個體需開啟
innodb_deadlock_detect
參數。修改資料庫執行個體參數:
RDS MySQL請參見設定執行個體參數。
PolarDB MySQL版請參見設定叢集參數和節點參數。
分析資料:基於
SHOW ENGINE INNODB STATUS
返回的最近一次死結日誌進行分析。
如果發生過多次死結,觸發分析時只能分析最近一次死結,然後保留本次分析得到的死結相關資料。
操作步驟
登入DAS控制台。
在左側導覽列中,單擊執行個體監控。
找到目標執行個體,單擊執行個體ID,進入目標執行個體詳情頁。
在左側導覽列中,單擊鎖分析,在鎖分析頁面中死結分析項選擇最近死結分析頁簽。
點擊建立分析,發起最近死結診斷。
查看詳情
選擇時間段,查看該時間段內曾經觸發過的死結診斷任務結果。
點擊最近死結分析中診斷工作清單詳情列中的查看詳情。
彈出的抽屜頁會顯示對應死結詳細資料的三種查看方式:
視圖:以死結關係可視化的形式展示死結詳情,點擊對應的事務圖塊可以在下方查看對應事務的詳細資料。
列表:以列表的形式,對比持有鎖事務的詳細資料。
日誌:展示
SHOW ENGINE INNODB STATUS
返回的原始死結日誌(LATEST DETECTED DEADLOCK)內容。
結合SQL洞察和審計分析
在目標執行個體左側導覽列中,單擊SQL洞察和審計,在審計頁面點擊開啟進階查詢。
選擇包含死結發生時間的一段時間範圍,並填入線程ID(最近死結分析中的Thread id),查詢該事務執行過的SQL內容。
如上述樣本中的事務1
上述樣本中的事務2(已復原)
全量死結分析
參數設定:執行個體需開啟
innodb_deadlock_detect
、innodb_print_all_deadlocks
參數。RDS MySQL執行個體需將log_error_verbosity
參數值設定為3。修改資料庫執行個體參數:
RDS MySQL請參見設定執行個體參數。
PolarDB MySQL版請參見設定叢集參數和節點參數。
分析資料:每小時解析執行個體錯誤記錄檔中列印的死結資訊,統計死結數量趨勢以及各個死結的詳細資料。
冷卻時間:當執行個體開啟DAS經濟版或DAS企業版,識別到未開啟所需參數時,會冷卻12小時不進行分析。如果使用者在冷卻時間內開啟了所需參數,也將在冷卻時間後再次調度分析任務。例如:
執行個體11點12分的分析任務檢測到參數未開啟,將進行12小時的定時任務冷卻,23點12分後全量死結分析將再次調度該執行個體定時任務,如果執行個體參數仍未開啟,將繼續進行12小時的定時任務冷卻;如果執行個體在23點12分之前開啟了參數,在23點12分後將解除冷卻,定時任務將每小時進行分析,直到執行個體關閉參數或關閉DAS經濟版或DAS企業版。
不支援分析包含“TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACTION”描述的死結。
操作步驟
登入DAS控制台。
在左側導覽列中,單擊執行個體監控。
找到目標執行個體,單擊執行個體ID,進入目標執行個體詳情頁。
在左側導覽列中,單擊鎖分析,在鎖分析頁面中死結分析項選擇全量死結分析頁簽。
全量死結分析每小時自動分析執行個體錯誤記錄檔中列印的死結日誌,統計死結數量並繪製為頁面上方的死結變化趨勢圖。選擇時間段,查看該時間段內的死結變化趨勢。
查看詳情
點擊全量死結分析中死結列表詳情列的查看詳情。
彈出的抽屜頁會顯示對應死結詳細資料的三種查看方式(視圖、列表、日誌),其中,日誌內容為死結相關的錯誤記錄檔。視圖、列表展示形式與最近死結分析一致,此處不再贅述,詳情請參見最近死結分析-查看詳情。
結合SQL洞察和審計分析
與最近死結分析一致,此處不再贅述,詳情請參見最近死結分析-結合SQL洞察和審計分析。