當面臨RDS MySQL的死鎖問題時,您可以使用鎖分析功能,直觀地查看和分析數據庫最近一次發生的死鎖、事務阻塞、元數據鎖等待信息,從而快速定位死鎖問題,提升數據庫的穩定性。
前提條件
實例為如下版本:
RDS MySQL 8.0 高可用系列或集群系列
RDS MySQL 5.7 高可用系列或集群系列
RDS MySQL 5.6 高可用系列
RDS MySQL 5.5 高可用系列
您可在實例基本信息頁面,查看實例版本,確保類型及系列為高可用系列或集群系列,數據庫類型為MySQL。
基礎系列的實例不支持鎖分析功能。
功能簡介
鎖分析功能支持對數據庫實例進行多維度的死鎖分析、事務阻塞分析、元數據鎖等待分析。
全量死鎖分析和其他鎖分析功能需要開啟DAS經濟版或DAS企業版。需注意,DAS經濟版和DAS企業版目前僅支持部分地域,詳情請參見各個版本支持的數據庫和地域。開通DAS經濟或企業版請參見開通經濟版和企業版。
最近死鎖分析:DAS基于
SHOW ENGINE INNODB STATUS
返回的最近一次死鎖日志進行分析。如果發生過多次死鎖,DAS只會對最近一次死鎖進行分析。全量死鎖分析:DAS定時對錯誤日志進行分析,解析其中的死鎖信息,并進行全面的死鎖分析。同時,DAS支持查看指定時間范圍內的死鎖趨勢以及各個死鎖的詳細信息。
其他鎖分析:DAS根據
information_schema
和performance_schema
相關數據,實時分析數據庫實例當前會話中的元數據鎖和事務阻塞情況。元數據鎖分析:DAS根據
information_schema.processlist
等的數據,推導鎖等待關系,并生成相應的關系圖。事務阻塞分析:DAS根據
information_schema.processlist
,information_schema.innodb_trx
,以及information_schema.innodb_lock_waits
(MySQL 5.6和5.7使用該數據)和performance_schema.data_lock_waits
(MySQL 8.0使用該數據)分析事務阻塞關系,并生成相應的關系圖。
數據庫實例參數限制
目標數據庫必須設置相應的參數后,才能使用鎖分析的對應功能。
鎖分析功能 | 涉及的數據庫實例參數 |
最近死鎖分析 | 開啟 |
全量死鎖分析 |
|
其他鎖分析中的事務阻塞分析 | 對于RDS MySQL 8.0實例,需要開啟 |
修改數據庫實例參數請參見設置實例參數。
注意事項
死鎖分析目前不支持分析包含“TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACTION”描述的死鎖。
操作步驟
訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。
在左側導航欄中,選擇自治服務 > 一鍵診斷。
單擊鎖分析頁簽。
在鎖分析頁面,單擊左側創建分析。
(可選)如發現死鎖,可以在新生成的死鎖診斷列表右側,在詳情欄中單擊查看詳情。
在鎖分析頁面,查看或診斷數據庫實例最近發生過的死鎖。
最近死鎖分析
在最近死鎖分析頁簽,單擊創建分析,DAS基于
SHOW ENGINE INNODB STATUS
返回的最近一次死鎖日志進行分析。選擇時間段,查看該時間段內的死鎖診斷結果。單擊診斷結果詳情列的查看詳情,查看死鎖診斷的詳細結果。
全量死鎖分析
在全量死鎖分析頁簽,查看指定時間范圍內的死鎖趨勢以及各個死鎖的詳細信息。
其他鎖分析
在其他鎖分析頁簽,單擊創建分析,DAS根據
information_schema
和performance_schema
相關數據,實時分析數據庫實例當前會話中的元數據鎖和事務阻塞情況。選擇時間段,查看該時間段內的診斷結果。
單擊診斷結果前的查看鎖分析的統計信息。
單擊統計信息操作列的查看詳情,查看診斷的詳細結果和鎖分析關系圖。
鼠標懸停到對應會話上時,可以查看選中會話關聯的鎖等待關系。單擊該會話,可以查看選中會話的詳細信息。
后續操作
當數據庫實例出現死鎖時,您可以利用鎖分析所得的事務線程ID等信息,在SQL洞察和審計中分析相關事務執行情況,以確認死鎖的原因。例如,在事務開啟后,當更新了一定數量的數據行后,這些數據行會被鎖定。如果事務持續時間較長而未提交或回滾(包括隱式提交和隱式回滾),那么后續的會話或事務在更新相同的數據行時,就會進入LOCK WAIT狀態。