MySQL锁表排查
MySQL版本:5.7
information_schema 库中有三个关于锁的表:
innodb_trx
:当前运行的所有事务innodb_locks
:当前出现的锁innodb_lock_waits
:锁等待的对应关系
- 查询进程
show processlist
查询到相对应的进程,然后 kill id - 查询是否锁表
show OPEN TABLES where In_use > 0;
- 查询正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
- 查询等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
- 查询正在执行的事务:
SELECT * from information_schema.INNODB_TRX;
kill trx_mysql_thread_id;
导致事务长期未提交的因素很多,常见的有:
- 事务过程中执行其他非数据库操作,导致事务长期未被处理;
- 事务处理异常或实现逻辑有误,导致事务未被正常处理;
- 网络异常导致应用端请求未被正常发送给数据库,数据库等待应用后续操作;
- 应用服务器性能问题(如CPU爆满),导致应用无法及时切换到该进程进行处理。
版权声明:本文为weixin_43431433原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。