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

 更新时间:2022年08月17日 09:58:53   作者:刘大大__  
这篇文章主要介绍了MySQL中出现lock wait timeout exceeded问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

1、MySQL出现lock wait timeout exceeded; try restarting transaction

我们可以通过到information_schema 中来进行查找被锁的语句。

解释:information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面。

我们可以用下面三张表来查原因:

  • innodb_trx 当前运行的所有事务
  • innodb_locks 当前出现的锁
  • innodb_lock_waits 锁等待的对应关系

如果数据库中有锁的话,我们可以使用这条语句来查看:

select * from information_schema.innodb_trx

图中红色语句 LOCK WAIT为占用系统资源的语句,我们需要杀掉这个锁,执行 kill 线程id号。上面这条记录的id为199120823069, trx_mysql_thread_id 为 738178711, 所以我们执行:kill 738178711杀掉这个MySQL语句的线程即可。

执行之后:

kill 738178711
// 查询线程
// SELECT * from information_schema.processlist WHERE id = 738178711;
// show full processlist;

其他的记录不需要关注,因为其他的记录状态为“RUNNING” 即正在执行的事务,并没有锁。

2、三张表字段说明

innodb_trx

desc information_schema.innodb_trx;

innodb_locks

desc information_schema.innodb_locks;

innodb_lock_waits

desc information_schema.innodb_lock_waits

3、终极方法

如果以上方法杀掉线程,但还是不能解决,则我们就可以查找执行线程用时比较久的用户,然后直接干掉。

SELECT * from information_schema.`PROCESSLIST` WHERE Time > 1000 AND USER = 'wonguser' ORDER BY TIME desc;
kill 740097562

这样把所有耗时比较久的任务干掉,就可以解决这个问题了。

4、总结一下

关于我的那个问题,我通过这个方法 select * from information_schema.innodb_trx 已经杀掉了线程,但通过表直接修改那个id对应的数据,还是会弹出Lock wait timeout exceeded; try restarting transaction这样的异常,在网上找了许多未找出具体的解决方法,后来自己灵光一现,可以找出那些好事比较久的线程,然后把那些可疑的线程杀掉,没想到这个问题就解决了,可以正常对这行数据进行操作了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL启用SSD存储的实例详解

    MySQL启用SSD存储的实例详解

    这篇文章主要介绍了MySQL启用SSD存储的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-10-10
  • mysql5.7.17安装使用图文教程

    mysql5.7.17安装使用图文教程

    这篇文章主要为大家详细介绍了MySql安装与使用图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • mySQL之关键字的执行优先级讲解

    mySQL之关键字的执行优先级讲解

    这篇文章主要介绍了mySQL之关键字的执行优先级讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 详解 MySQL中count函数的正确使用方法

    详解 MySQL中count函数的正确使用方法

    这篇文章主要介绍了 MySQL中count函数的正确使用方法,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下。
    2020-11-11
  • mysql学习笔记之帮助文档

    mysql学习笔记之帮助文档

    本文给大家详细讲述的是mysql的help(帮助)命令的用法,非常细致,有需要的小伙伴可以来参考下
    2017-02-02
  • 详解MySQL中的基本表与视图

    详解MySQL中的基本表与视图

    Mysql是一种常用的关系型数据库管理系统,其中的基本表和视图是数据库中存储和操作数据的两种重要方式,本文将介绍什么是基本表和视图,并探讨为何要使用视图以及视图的优缺点,最后,将给出在Mysql中创建视图的方法,需要的朋友可以参考下
    2023-09-09
  • Workbench连接不上阿里云服务器Ubuntu的Mysql解决方法(已测)

    Workbench连接不上阿里云服务器Ubuntu的Mysql解决方法(已测)

    这两天为了解决workbench连接不上阿里云服务器的问题,搞得头大,网上搜到的教程都大同小异,但唯独到我这就是行不通。不过好在最后终于解决了,记录一下这个坑爹的过程,另外脚本之家小编特把这些问题整理了一下,看完这一篇文章基本上就解决了
    2020-02-02
  • Navicat Premium15连接云服务器中的数据库问题及遇到坑

    Navicat Premium15连接云服务器中的数据库问题及遇到坑

    这篇文章主要介绍了Navicat Premium15连接云服务器中的数据库问题及遇到坑,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 从零开始MySQL触发器实战攻略

    从零开始MySQL触发器实战攻略

    想要掌握MySQL触发器的实战技巧吗?从零开始,跟我一起揭开触发器神秘的面纱!轻松入门,迅速提升,这个指南将让你的MySQL技能焕然一新!一探究竟,惊喜等你发现!
    2024-02-02
  • 关于MySQL性能调优你必须了解的15个重要变量(小结)

    关于MySQL性能调优你必须了解的15个重要变量(小结)

    MYSQL 应该是比较流行的 WEB 后端数据库。虽然 NOSQL 最近越来越多的被提到,但是相信大部分架构师还是会选择 MYSQL 来做数据存储。本文作者总结梳理MySQL性能调优的15个重要变量,感兴趣的可以了解一下
    2019-07-07

最新评论