文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL:MySQLTransactionRollbackException - Lock wait timeout exceeded; try restarting transaction

2023-08-17 23:00

关注

“Lock wait timeout exceeded; try restarting transaction” 一般出现这样的错误时,往往是因为一些事务在等待获取某个锁,但由于这个锁被其他长时间未完成的事务持有,所以导致等待超时。

一 , 定位问题

可以通过以下几种命令去定位

二 , 解决方案

紧急措施

1.紧急措施:终止(KILL)相关的线程,释放任何被该线程持有的锁

eg: 以上面的例子为列 KILL 881611
需要注意,可能会对业务产生影响,导致数据状态不一致或者业务逻辑中断 !!!

2.次之紧急措施:调整 Innodb 锁等待时间,延缓了问题的出现

注意 这只是允许线程等待更长的时间来获取锁,而不是解决了锁的竞争问题。还是会导致其他线程仍然在等待获取锁 !!!

非紧急措施

  1. 优化查询:优化导致问题的查询语句,例如通过添加索引来提高查询性能,或者改变查询的逻辑以避免需要获取锁。
  2. 修改数据库的并发控制策略:例如,你可以考虑使用乐观锁(如果应用逻辑允许)。
  3. 设置合理的连接数:如果有太多的连接在等待获取锁,那么你可能需要减少最大连接数,以减少锁争用的可能性。
    1. 查看当前的连接数 SHOW STATUS LIKE 'Threads_connected';
    2. 设置最大连接数 SET GLOBAL max_connections = 200;
  4. 开启并优化慢查询日志
    1. 确认慢查询日志是否已经开启 SHOW VARIABLES LIKE 'slow_query_log';
    2. 开启慢查询日志 SET GLOBAL slow_query_log = 'ON';
    3. 查看慢查询的时间阈值 SHOW VARIABLES LIKE 'long_query_time';
    4. 查看慢查询日志的文件位置SHOW VARIABLES LIKE 'slow_query_log_file';
  5. 调整事务的大小和复杂性
    1. 更小、更简单的事务会导致更少的锁争用。

MySQLTransactionRollbackException - Lock wait timeout exceeded

来源地址:https://blog.csdn.net/weixin_41020185/article/details/130783324

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯