下面我们对这三张表进行解析:
INNODB_TRX
字段名称 说明
trx_id innodb 存储引擎内部唯一的事务ID
trx_state 当前事务的状态
trx_started 事务的开始时间
trx_requested_lock_id 等待事务的锁ID。如trx_state 的状态为LOCK WAIT ,那么该值代表当前的事务等待之前事务占用锁资源的ID。 若trx_state 不事LOCK WAIT ,则该指为空。
trx_wait_started 事务等待开始的事件
trx_weight 事务的权重,反映了一个事务修改和锁住的行数,在Innodb 存储引擎中,当发生死锁需要回滚时,Innodb 存储引擎会选择一个权重最小的值进行回滚。
trx_mysql_thread_id MySQL中的线程ID,SHOW PROCESSLIST 显示的结果
trx_query 事务运行的SQL 语句
INNODB_LOCKS的结构
lock_id 锁的ID
lock_trx_id 事务的ID
lock_mode 锁的模式
lock_type 锁的类型,表锁还事行锁
lock_table 要加锁的表
lock_index 锁住的索引
lock_space 锁对象的space id
lock_page 事务锁定页的数量,若是表锁,则该值为null
lock_rec 事务锁定行的数量,若是表锁,则该指为null
lock_data 事务锁定记录的主键值,若是表锁,则该值为null
INNODB_LOCK_WAITS
字段 说明
requesting_trx_id 申请锁资源的事务ID
requesting_lock_id 申请的锁的ID
blocking_trx_id 阻塞的事务ID
blocking_trx_id 阻塞的锁的ID
可以通过以上的三张表查询到详细的事务锁的信息
也可以通过以下sql 进行详细的方法查询
select
r.trx_id waiting_trx_id,
r.trx_mysql_thread_id waiting_thread,
r.trx_query waiting_query,
b.trx_id blocking_trx_id,
b.trx_mysql_thread_id blocking_thread,
b.trx_query blocking_query
from information_schema.innodb_lock_waits w
inner join information_schema.innodb_trx b
on b.trx_id = w.blocking_trx_id
inner join information_schema.innodb_trx r
on r.trx_id = w.requesting_trx_id \G;