嘘~ 正在从服务器偷取页面 . . .

如何查看myql里的锁


如何查看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


文章作者: 张纯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 张纯 !
  目录