本文介绍如何使用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洞察和审计分析。