通过3个系统表来查看锁信息
INNODB_TRX表 a) trx_id: innodb存储引擎内部事务唯一的事务id。 b) trx_state: 当前事务的状态。 c) trx_started: 事务开始的时间。 d) trx_requested_lock_id: 等待事务的锁id,如trx_state的状态为LOCK WAIT,那么该值代表当前事务之前占用锁资源的id,如果trx_state不是LOCK WAIT的话,这个值为null。 e) trx_wait_started: 事务等待开始的时间。 f) trx_weight: 事务的权重,反映了一个事务修改和锁住的行数。在innodb的存储引擎中,当发生死锁需要回滚时,innodb存储引擎会选择该值最小的事务进行回滚。 g) trx_mysql_thread_id: 正在运行的mysql中的线程id,show full processlist显示的记录中的thread_id。 h) trx_query: 事务运行的sql语句,在实际中发现,有时会显示为null值,当为null的时候,事务中等待锁超时直接报错(ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction)后,trx_query就显示为null值 INNODB_LOCKS表 a) lock_id: 锁的id以及被锁住的空间id编号、页数量、行数量 b) lock_trx_id: 锁的事务id。 c) lock_mode: 锁的模式。 d) lock_type: 锁的类型,表锁还是行锁 e) lock_table: 要加锁的表。 f) lock_index: 锁的索引。 g) lock_space: innodb存储引擎表空间的id号码 h) lock_page: 被锁住的页的数量,如果是表锁,则为null值。 i) lock_rec: 被锁住的行的数量,如果表锁,则为null值。 j) lock_data: 被锁住的行的主键值,如果表锁,则为null值。 INNODB_LOCK_WAITS表 当事务量比较少,我们可以直观的查看,当事务量非常大,锁等待也时常发生的情况下,这个时候可以通过INNODB_LOCK_WAITS表来更加直观的反映出当前的锁等待情况: 1) requesting_trx_id:申请锁资源的事务id。 2) requested_lock_id:申请的锁的id。 3) blocking_trx_id: 阻塞的事务id。 4) blocking_lock_id: 阻塞的锁的id。
原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/3832.html