我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

一 , 定位问题

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

  • SHOW FULL PROCESSLIST;显示当前MySQL中的所有进程信息,包括每个进程的ID、用户、主机、数据库、命令、运行时间等。如果你看到有某个进程的运行时间特别长,或者状态一直处于"Locked",那么就有可能是这个进程导致了锁等待超时。
    eg: 881611 root xxxx:60646 xxx Query 2046 starting xxxx xxxx

  • SHOW ENGINE INNODB STATUS;:显示InnoDB存储引擎的详细状态信息,包括当前的事务、锁情况、缓冲池状态、磁盘I/O信息等。然后通过一下两部分定位。

    • LATEST DETECTED DEADLOCK会显示最新检测到的死锁信息,
    • TRANSACTIONS"部分会显示当前 InnoDB 引擎中的事务状态,包括事务的 ID,状态,所持有的锁,以及正在等待的锁等信息。
  • SHOW OPEN TABLES;:显示当前打开的表的信息,了解哪些表可能正在被锁定。

  • SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;:显示当前的InnoDB锁情况。可以直观地查看锁的状态,需要InnoDB引擎支持。

二 , 解决方案

紧急措施

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

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

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

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

  • 临时调整 优先推荐
    • SET GLOBAL innodb_lock_wait_timeout = 120;立即生效,但是在 MySQL 服务器重启之后就会失效。
  • 永久调整
    • MySQL 的配置文件通常是 my.cnf 或 my.ini,位于 MySQL 服务器的安装目录下。在 [mysqld] 部分添加或修改以下行:
      [mysqld]innodb_lock_wait_timeout = 120

非紧急措施

  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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

Lock wait timeout exceeded解决优化方案 一 , 定位问题可以通过以下几种命令去定位 二 , 解决方案紧急措施1.紧急措施:终止(KILL)相关的线程,释放任何被该线程持有的锁2.次之紧急措施:调整 In
2023-08-17

Lock wait timeout exceeded; try restarting transaction

一、问题抛出 在做查询语句时,MySQL 抛出了这样的异常: MySQL server error report:Array( [0] => Array ( [message] => MySQL Query Error
Lock wait timeout exceeded; try restarting transaction
2019-10-20

Lock wait timeout exceeded; try restarting transaction - 如何解决MySQL报错:事务等待超时

在使用MySQL数据库时,有时可能会遇到一个常见的错误:Lock wait timeout exceeded; try restarting transaction,该错误表示事务等待超时。这个错误通常发生在并发访问数据库时,因为有一个事务
2023-10-21

mysql数据库死锁问题解决MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transact

记录一下: 原因:spring事务提交时导致数据库事务得不到释放,产生死锁问题,紧接着抛出操作超时异常:MySQLTransactionRollbackException: Lock wait timeout exceeded; try
2023-08-16

Lock wait timeout exceeded; try restarting transaction - 如何解决MySQL报错:锁等待超时,尝试重新启动事务

正文:MySQL作为一种常用的关系型数据库管理系统,被广泛应用于各种类型的应用程序。然而,在使用MySQL时,我们可能会遇到各种错误和异常。其中一个常见的错误是“Lock wait timeout exceeded; try restart
2023-10-21

MySQL中出现lock wait timeout exceeded问题及解决

目录1、mysql出现lock wait timeout exceeded; try restarting transaction2、三张表字段说明3、终极方法4、总结一下1、MySQL出现lock wait timeout exceede
2022-08-17

Mysql事物锁等待超时Lock wait timeout exceeded;怎么办

小编给大家分享一下Mysql事物锁等待超时Lock wait timeout exceeded;怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!问题场景问题出现环境:1、在同一事务内先后对同一条数据进行插入和更新操作;
2023-06-29

Deadlock found when trying to get lock; try restarting transaction 【MySQL死锁问题解决】

视频地址: https://www.bilibili.com/video/bv1zY411N7tB 最近在调试接口的时候遇到了MySQL死锁问题,我自己测试的时候一切都好好的,但在并发下,就死锁了 其实死锁问题,并没有一个类似“万金
2023-08-20

Lock wait timeout exceeded - 如何解决MySQL报错:锁等待超时

摘要:在使用MySQL数据库时,有时会遇到锁等待超时的问题。这个问题通常发生在多个事务同时尝试修改同一行数据时,其中一个事务会等待另一个事务的锁释放。本文将介绍如何解决MySQL报错中的锁等待超时问题,并提供具体的代码示例。一、什么是锁等待
2023-10-21

数据库死锁的问题,Deadlock found when trying to get lock; try restarting transaction at Query.formatError

场景:应用刚上线排除大批量请求的问题线上多次出现的Deadlock found when trying to get lock错误代码:async batchUpdate(skus, { transaction }) { const result = a
数据库死锁的问题,Deadlock found when trying to get lock; try restarting transaction at Query.formatError
2016-02-23

MySQL出现"Lock wait timeout exceeded"错误的原因是什么详解

目录1. 概述2. 在mysql中的锁3. 隔离级别4. 监控4.1. InnoDB 状态4.2. 进程列表4.3. Select语句5. 测试设置6. 测试场景6.1. 行锁6.2. 检查数据锁表中的行锁6.3. 行锁和索引6.4. 行锁
2023-05-23

编程热搜

目录