mysql元数据锁导致的交易失败案例

本文描述了一起因MDL锁引起的交易失败案例,涉及MySQL中锁超时、慢查询和元数据锁。问题源于持续的慢SQL导致分区表锁定,进而影响其他事务。作者通过分析binlog追踪到了问题源头,并建议客户调整业务执行时间以避免类似问题。
摘要由CSDN通过智能技术生成

近日在客户现场碰到一个典型MDL锁导致交易失败的案例,记录一下

客户交易场景在9月19号的0点时候报错,报错持续到2:40左右,之后业务就恢复了。

排查过程:

1.根据客户反馈,交易在0点开始失败,如下图:

2.查询对应时间段的mysql运行状态,发现该时间段内相关交易均被堵塞,SQL执行失败,应用段日志报错为锁超时lock wait timeout exceeded;

3.查询慢SQL日志,发现均为5S的慢查询SQL,非常有规律,查询元数据锁超时lock_wait_timeout参数,确定该参数设置为5S;

4.至此,可以初步确定该问题为元数据锁等待导致的业务阻塞(具体是什么元数据锁导致的需进一步分析;

5.由于已经没有对应时间点的相关历史会话及锁信息,只能根据相关binlog信息倒推,解析对应时间段的binlog日志,并逐步分析,最终定位到如下创建分区语句执行时间为6小时,与对应时间段的数据库线程等待信息一致:

6.据以上信息,确认为应用端持续的慢SQL select导致该分区表持续持有MDL S锁不释放,进而导致分区在0:00执行添加分区DDL操作时无法加MDL X锁而进入线程等待,反过来进一步导致所有涉及到该表的事务均失败。

7.经与客户确认该凌晨有持续的批量业务执行,导致的该问题,建议客户修改批量业务时间或者调整创建新分区的定时任务时间,来规避该问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值