MySQL维护之哪些命令可以查看锁

  在MySQL实战之死锁与解决方案 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)MySQL中锁机制实现原理 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中对查看锁的信息都有部分应用。本文总结MySQL中查看各种锁的命令,具体如下:

  1、show processlist

      

    “show processlist;”显示哪些线程正在运行。如果有超级权限,那么就可以看到所有线程。如果有线程在update或者insert某个表,此时进程的“status”为updating或者sending data。“show processlist;”只列出前100条,如果想全列出那么可以使用“show full processlist;”。

    一些常见的状态可参考如下:

        

  2、show open tables

        

    这条命令能够查看当期有哪些表是打开的。In_use列表示有都是线程正在使用某张表,Name_locked表示表名是否被锁,这一般发生在DROP或RENAME命令操作这张表时。所以,这条命令不能查询到当前某张表是否有死锁,谁拥有表上的这个锁等。常用的命令如下:

      show open tables from db_name;

      show open tables where in_use>0;

  3、show engine innodb status\G;

    这条命令可以查看innodb引擎的运行时信息,其中第一部分的信息就是状态:

        

  4、查看服务器的状态:show status like '%lock%';

        

  5、查询information_schema和performance_schema下的表

    通过information_schema下的innodb_trx这张表可以更新监控当前事情,并且分析存在的锁问题。当前innodb内核中的当前活跃(ACTIVE)事务:select * from information_schema.innodb_trx;

        

     其表结构如下:

        

    通过performance_schema查看data_lock_waits和data_locks表:

         

    通过data_locks可以查看当前状态产生的锁,仅在有锁等待时有结果输出:

        

    其具体表结构如下:

        

    通过data_lock_waits可以查看当前状态的锁等待,仅在有锁等待时有结果输出:

        

    具体表结构如下:

        

    可以根据上3张表进行联合查询,得到更直观清晰的结果,参考SQL如下:

        

 

posted on 2022-09-23 11:15  池塘里洗澡的鸭子  阅读(3061)  评论(0编辑  收藏  举报