鎖分析
當面臨數(shù)據(jù)庫的死鎖問題時,您可以使用鎖分析功能,直觀地查看和分析數(shù)據(jù)庫發(fā)生的死鎖,從而快速定位和解決死鎖問題,確保數(shù)據(jù)庫的穩(wěn)定運行。
前提條件
目標數(shù)據(jù)庫引擎為:
RDS MySQL
自建MySQL
目標數(shù)據(jù)庫實例已接入DAS,并且接入狀態(tài)顯示為接入正常,接入方法詳情請參見接入數(shù)據(jù)庫實例。
功能簡介
鎖分析功能支持對數(shù)據(jù)庫實例進行多維度的死鎖分析。
全量死鎖分析和其他鎖分析功能需要開啟DAS經(jīng)濟版或DAS企業(yè)版。需注意,DAS經(jīng)濟版和DAS企業(yè)版目前僅支持部分地域,詳情請參見各個版本支持的數(shù)據(jù)庫和地域。開通DAS經(jīng)濟版或企業(yè)版請參見開通經(jīng)濟版和企業(yè)版。
最近死鎖分析:DAS基于
SHOW ENGINE INNODB STATUS
返回的最近一次死鎖日志進行分析。如果發(fā)生過多次死鎖,DAS只會對最近一次死鎖進行分析。全量死鎖分析:DAS定時對錯誤日志進行分析,解析其中的死鎖信息,并進行全面的死鎖分析。同時,DAS支持查看指定時間范圍內(nèi)的死鎖趨勢以及各個死鎖的詳細信息。
其他鎖分析:DAS根據(jù)
information_schema
和performance_schema
相關(guān)數(shù)據(jù),實時分析數(shù)據(jù)庫實例當前會話中的元數(shù)據(jù)鎖和事務(wù)阻塞情況。元數(shù)據(jù)鎖分析:DAS根據(jù)
information_schema.processlist
等的數(shù)據(jù),推導(dǎo)鎖等待關(guān)系,并生成相應(yīng)的關(guān)系圖。事務(wù)阻塞分析:DAS根據(jù)
information_schema.processlist
,information_schema.innodb_trx
,以及information_schema.innodb_lock_waits
(MySQL 5.6和5.7使用該數(shù)據(jù))和performance_schema.data_lock_waits
(MySQL 8.0使用該數(shù)據(jù))分析事務(wù)阻塞關(guān)系,并生成相應(yīng)的關(guān)系圖。
數(shù)據(jù)庫實例參數(shù)限制
目標數(shù)據(jù)庫必須設(shè)置相應(yīng)的參數(shù)后,才能使用鎖分析的對應(yīng)功能。
鎖分析功能 | 涉及的數(shù)據(jù)庫實例參數(shù) |
最近死鎖分析 | 開啟 |
全量死鎖分析 |
|
其他鎖分析中的事務(wù)阻塞分析 | 對于RDS MySQL 8.0實例,需要開啟 |
修改數(shù)據(jù)庫實例參數(shù)請參見設(shè)置實例參數(shù)。
注意事項
死鎖分析目前不支持分析包含“TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACTION”描述的死鎖。
操作步驟
登錄DAS控制臺。
在左側(cè)導(dǎo)航欄中,單擊實例監(jiān)控。
找到目標實例,單擊實例ID,進入目標實例詳情頁。
在左側(cè)導(dǎo)航欄中,單擊鎖分析。
在鎖分析頁面,查看或診斷數(shù)據(jù)庫實例最近發(fā)生過的死鎖。
最近死鎖分析
在最近死鎖分析頁簽,單擊創(chuàng)建分析,DAS基于
SHOW ENGINE INNODB STATUS
返回的最近一次死鎖日志進行分析。選擇時間段,查看該時間段內(nèi)的死鎖診斷結(jié)果。單擊診斷結(jié)果詳情列的查看詳情,查看死鎖診斷的詳細結(jié)果。
全量死鎖分析
在全量死鎖分析頁簽,查看指定時間范圍內(nèi)的死鎖趨勢以及各個死鎖的詳細信息。
其他鎖分析
在其他鎖分析頁簽,單擊創(chuàng)建分析,DAS根據(jù)
information_schema
和performance_schema
相關(guān)數(shù)據(jù),實時分析數(shù)據(jù)庫實例當前會話中的元數(shù)據(jù)鎖和事務(wù)阻塞情況。選擇時間段,查看該時間段內(nèi)的診斷結(jié)果。
單擊診斷結(jié)果前的查看鎖分析的統(tǒng)計信息。
單擊統(tǒng)計信息操作列的查看詳情,查看診斷的詳細結(jié)果和鎖分析關(guān)系圖。
鼠標懸停到對應(yīng)會話上時,可以查看選中會話關(guān)聯(lián)的鎖等待關(guān)系。單擊該會話,可以查看選中會話的詳細信息。
后續(xù)操作
當數(shù)據(jù)庫實例出現(xiàn)死鎖時,您可以利用鎖分析所得的事務(wù)線程ID等信息,在SQL洞察中分析相關(guān)事務(wù)執(zhí)行情況,以確認死鎖的原因。例如,在事務(wù)開啟后,當更新了一定數(shù)量的數(shù)據(jù)行后,這些數(shù)據(jù)行會被鎖定。如果事務(wù)持續(xù)時間較長而未提交或回滾(包括隱式提交和隱式回滾),那么后續(xù)的會話或事務(wù)在更新相同的數(shù)據(jù)行時,就會進入LOCK WAIT狀態(tài)。