如何查看mysql里的锁
查看mysql锁
1.查看当前有无锁等待
mysql> show status like 'innodb
2.查看哪个事务在等待(被阻塞了)
mysql> select * from information_schema.INNODB_TRX WHERE trx_state='LOCK WAIT'\G
trx_state 表示该事务处于锁等待状态。
trx_query : 当前被阻塞的操作是select * from actor where actor_id=1 for update。
从trx_mysql_thread_id和trx_id可以看到这里查到当前被阻塞的事务的:
线程ID是 971,注意说的是线程id
事务ID是3934
- 3.查询该事务被哪个事务给阻塞了 从innodb_trx获取到被阻塞的trx_id是3934,阻塞该事务的事务id是3933
mysql> SELECT * FROM performance_schema.threads WHERE processlist_id=970\G
- 4.根据trx_id,从innodb_trx表可查询到trx_mysql_thread_id线程id为970
mysql> select * from information_schema.innodb_trx where trx_id=3933 \G
- 5.根据线程id,查询表拿到thread_id为995
mysql> SELECT * FROM performance_schema.threads WHERE processlist_id=970\G
- 6.根据thread_id,查询当前锁源的sql
mysql> SELECT * FROM performance_schema.events_statements_current WHERE thread_id=995\G
总结
整个流程如下:
(1)首先查询是否有锁,根据锁查到被锁的trx_id
(2)根据被锁的trx_id可以查到锁源的trx_id
(3)根据锁源的trx_id查到trx_mysql_thread_id
(4)再根据trx_mysql_thread_id查到thread_id
(5)最后,用thread_id查找到锁源的sql