对于MySQL来说,在information_schema 架构下添加了表 innodb_trx innodb_locks innodb_lock_waits 三张表。通过这三张表我们可以简单的监控当前事务并分析可能存在的锁,
下面我们对这三张表进行解析:
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;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30176559/viewspace-1840280/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30176559/viewspace-1840280/