在事务中更新大量数据造成的锁等待超时和慢查询

根据公司SRE给出的慢查询记录:
在这里插入图片描述
我在Kibana中查到了相关的600多条日志:
在这里插入图片描述
根本原因在于某sql update,where id in的列表过长(多达几百),range过大的互斥锁不好申请(估计读已提交级别,update … where id in (…)采用的是间隙锁,查过一些资料,未能100%确认)。它所在的事务一直申请不到锁,就超时(默认50秒)报错了:

com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction

。而在宏观上,业务上又需要在一段时间内大量访问这段代码,就会反复产生大事务,加剧了锁的竞争,从而造成了慢查询。

一句话概括,大事务高并发

解决思路

拆分大事务

一些相关参考资料

Update和Insert操作与行锁表锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_23204557

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值