MySQL事务未提交导致锁表排查

  • Post author:
  • Post category:mysql

MySQL锁表排查

MySQL版本:5.7

information_schema 库中有三个关于锁的表:

  • innodb_trx:当前运行的所有事务
  • innodb_locks:当前出现的锁
  • innodb_lock_waits:锁等待的对应关系
  1. 查询进程
    show processlist
    查询到相对应的进程,然后 kill id
  2. 查询是否锁表
    show OPEN TABLES where In_use > 0;
  3. 查询正在锁的事务
    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
  4. 查询等待锁的事务
    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
  5. 查询正在执行的事务:
    SELECT * from information_schema.INNODB_TRX;
    kill trx_mysql_thread_id;

导致事务长期未提交的因素很多,常见的有:

  1. 事务过程中执行其他非数据库操作,导致事务长期未被处理;
  2. 事务处理异常或实现逻辑有误,导致事务未被正常处理;
  3. 网络异常导致应用端请求未被正常发送给数据库,数据库等待应用后续操作;
  4. 应用服务器性能问题(如CPU爆满),导致应用无法及时切换到该进程进行处理。

版权声明:本文为weixin_43431433原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。