在InnoDB 1.0版本之前,用户只能通过命令SHOW FULL PROCESSLIST,SHOWENGINE INNODB STATUS等来查看当前数据库中锁的请求,然后再判断事务锁的情况。 从InnoDB1.0开始,在INFORMATION_SCHEMA架构下添加了表INNODB_TRX、INNODB_LOCKS、INNODB_LOCK_WAITS。 通过这三张表,用户可以更简单地监控当前事务并分析可能存在的锁问题。

表INNODB_TRX 的事务目前处于“LOCK WAIT”状态,且运行的SQL语句是select*from parentlock in share mode。 该表只是显示了当前运行的InnoDB事务,并不能直接判断锁的一些情况。 与此同时,如果当前资源被锁住了,若锁住的页因为InnoDB存储引擎缓冲池的容量,导致该页从缓冲池中被刷出,则查看INNODB_LOCKS表时,该值同样会显示为NULL,即InnoDB存储引擎不会从磁盘进行再一次的查找。 在通过表INNODB_LOCKS查看了每张表上锁的情况后,用户就可以来判断由此引发的等待情况了。 表INNODB_LOCK_WAITS 通过上述的SQL语句,可以清楚直观地看到哪个事务阻塞了另一个事务。 这里只给出了事务和锁的ID。