本文介绍如何使用DAS锁分析功能对数据库进行死锁分析,包括最近死锁分析和全量死锁分析。
文中图片所示中的数据为测试用例数据,实际使用过程中,请以实际数据参数为准,包括线程ID、SQL语句等。
前提条件
- 目标数据库引擎为: - 最近死锁分析: - RDS MySQL 
- 自建MySQL 
- PolarDB MySQL版 
- PolarDB-X 2.0 
 
- 全量死锁分析: - RDS MySQL 
- PolarDB MySQL版 
 
 
- 目标数据库实例已接入DAS,并且接入状态显示为接入正常,接入方法详情请参见接入数据库实例。 
- 已开通DAS运维服务(原经济版)。 重要- DAS运维服务(原经济版)目前仅支持部分地域,详情请参见各个版本支持的数据库和地域。 
- 开通DAS运维服务(原经济版)请参见管理运维服务(原经济版)。 
 
最近死锁分析
- 参数设置:实例需开启 - innodb_deadlock_detect参数。说明- 该参数通常默认为开启状态,可通过执行 - SHOW VARIABLES LIKE '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。说明- 参数 - innodb_deadlock_detect通常默认为开启状态,可通过执行- SHOW VARIABLES LIKE 'innodb_deadlock_detect'进行确认。需注意,部分类型的实例无法自行调整该参数的设置值。- 修改数据库实例参数: - RDS MySQL请参见设置实例参数。 
- PolarDB MySQL版请参见设置集群参数和节点参数。 
 
 
- 分析数据:每小时解析实例错误日志中打印的死锁信息,统计死锁数量趋势以及各个死锁的详细信息。 
- 冷却时间:当实例开启DAS运维服务(原经济版),识别到未开启所需参数时,会冷却12小时不进行分析。如果用户在冷却时间内开启了所需参数,也将在冷却时间后再次调度分析任务。例如: - 实例11点12分的分析任务检测到参数未开启,将进行12小时的定时任务冷却,23点12分后全量死锁分析将再次调度该实例定时任务,如果实例参数仍未开启,将继续进行12小时的定时任务冷却;如果实例在23点12分之前开启了参数,在23点12分后将解除冷却,定时任务将每小时进行分析,直到实例关闭参数或关闭DAS运维服务(原经济版)。 
 
不支持分析包含“TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACTION”描述的死锁。
操作步骤
- 登录DAS控制台。 
- 在左侧导航栏中,单击智能运维中心 > 实例监控。 
- 找到目标实例,单击实例ID,进入目标实例详情页。 
- 在左侧导航栏中,单击锁分析,在锁分析页面中死锁分析项选择全量死锁分析页签。 
- 全量死锁分析每小时自动分析实例错误日志中打印的死锁日志,统计死锁数量并绘制为页面上方的死锁变化趋势图。选择时间段,查看该时间段内的死锁变化趋势。  
查看详情
- 点击全量死锁分析中死锁列表详情列的查看详情。  
- 弹出的抽屉页会显示对应死锁详细信息的三种查看方式(视图、列表、日志),其中,日志内容为死锁相关的错误日志。视图、列表展示形式与最近死锁分析一致,此处不再赘述,详情请参见最近死锁分析-查看详情。  
结合SQL洞察和审计分析
与最近死锁分析一致,此处不再赘述,详情请参见最近死锁分析-结合SQL洞察和审计分析。