如何统计MySQL中SHOW OPEN TABLES结果行数及检查锁事务?
解决MySQL锁定查询统计及事务/锁检查问题
一、统计被锁定表的行数
SHOW OPEN TABLES属于MySQL专有语句,无法直接作为子查询嵌套使用。你可以改用INFORMATION_SCHEMA.OPEN_TABLES系统表实现统计(这是SHOW OPEN TABLES的底层数据源),语法如下:
SELECT COUNT(*) FROM INFORMATION_SCHEMA.OPEN_TABLES WHERE In_use > 0;
这条语句会直接返回当前被锁定(In_use > 0)的表的数量。
二、检查活跃事务与锁运行状态
1. 查看所有活跃事务
通过InnoDB事务系统表,可获取当前正在运行的事务详情,包括事务ID、执行时长、关联SQL等:
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
2. 查看锁等待关系
若存在锁阻塞,这条语句会展示等待锁的事务、被阻塞资源,以及持有锁的事务信息:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
3. 查看当前所有持有的锁
直接获取系统中存在的锁类型、关联表、行信息等:
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
4. 筛选活跃进程(含锁定查询)
通过进程列表排查长时间运行的查询或锁定进程,排除休眠状态的进程:
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND != 'Sleep';
也可使用SHOW FULL PROCESSLIST;查看完整的进程SQL语句。
内容的提问来源于stack exchange,提问作者ShivaPendem
相关产品推荐
相关产品推荐

