MySQL如何查看当前等待的锁与查询状态
要查看MySQL中正在等待的锁或查询状态,最直接的方法是使用SHOW ENGINE INNODB STATUS命令或查询信息模式(Information Schema)中的相关表,通过执行SHOW ENGINE INNODB STATUS\G可以获取详细的InnoDB引擎状态报告,TRANSACTIONS”部分会显示当前等待锁的事务信息,包括被阻塞的事务ID和正在持有的锁。
对于更精准的监控,可以查询以下系统表:

information_schema.INNODB_TRX:查看所有正在运行的事务,重点关注trx_state字段为“LOCK WAIT”的记录。information_schema.INNODB_LOCKS:列出当前存在的锁信息,包括锁的类型和等待关系。information_schema.INNODB_LOCK_WAITS:直接显示锁等待的对应关系,通过关联INNODB_TRX表可以定位阻塞的源头。
以下查询能快速定位等待中的事务:
SELECT r.trx_id AS waiting_trx_id, r.trx_mysql_thread_id AS waiting_thread, b.trx_id AS blocking_trx_id, b.trx_mysql_thread_id AS blocking_thread FROM information_schema.INNODB_LOCK_WAITS w JOIN information_schema.INNODB_TRX r ON w.requesting_trx_id = r.trx_id JOIN information_schema.INNODB_TRX b ON w.blocking_trx_id = b.trx_id;
性能模式(Performance Schema) 中的events_waits_current表也可用于分析等待事件,日常运维中,建议结合慢查询日志和监控工具(如pt-deadlock-logger) 来预防锁等待导致的性能问题。
未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网。
原文地址:https://www.html4.cn/17082.html发布于:2026-09-15





