如何查看MySQL锁等待的原因


这篇文章给大家分享的是有关如何查看MySQL锁等待的原因的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。–sys库的介绍mysql 5.6也可以有sys库(基于performance_schema的视图)。sys库是一个开源项目,在githup上早就有,是一个DBA的开源工具,后来mysql感觉好,就放在了mysql5.7上。下载地址:https://github.com/mysql/mysql-sys[tms@m-db3 ~]$cd mysql-sys-master[tms@m-db3 ~]$mysql
这样,就可以在mysql5.6里面加入sys库了,不过mysql 5.6只有88张表,而mysql 5.7有101张,这是因为Mysql 5.7的performace_schema库里面又多了几张表。sys库是performance_schema的视图。–MySQL锁等待当Mysql发生锁等待开发云主机域名情况时,可以通过如下语句来在线查看:上面看到输出了很多的东西,看的我都蒙圈了。后来查看mysql官方文档,慢慢的才发现,其实只关注上面的waiting_pid、waiting_query和blocking_pid、blocking_query四个参数即可;其中waiting_pid和blocking_pid两个参数就是通过执行show processlist命令里面输出的线程id号,如下:通过上面两个的输出结果,我们明白了,是441803线程锁住了表,造成线程441805的等待。
我们看到发生等待的线程441805对应的sql语句是:update busi_reconciliationgbgs … where id = 4510,但是锁表的线程441803对应的sql语句竟然是Null。这就更让人迷惑了。于是我默默的翻开了ysql官方文档,原来里面已经对这个null专门做了说明。官方文档说,要想找到这个null值对应的阻塞语句,可以通过下面几个步骤寻找:a)、根据锁表的processlist id 441803,运用如下sql,找到null对应的sql语句,如下:b)、如果上面找到的sql语句,你还是不能分析出为什么他们会锁表,一直拿着锁不释放,那么你可以查看 performance_schema.events_statements_history表里面最近执行过的10条sql(假设上面查到的thread_id=28):其他:上面查询锁的sql可以只关注已下几个列,如下:~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~最近我用python 2.6写了个自动杀锁的脚本,只要发现sys.innodb_lock_waits表里面有锁表的内容,就杀死相应的sql线程,并输出杀死sql的内容到当前目录下:
感谢各位的阅读!关于“如何查看MySQL锁等待的原因”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

相关推荐: MySQL数据库总体架构讲义

本文主要给大家介绍MySQL数据库总体架构讲义,希望可以给大家补充和更新些知识,如有其它问题需要了解的可以持续在开发云行业资讯里面关注我的更新文章的。一、数据库的总体架构我们首先来看MySQL数据的总体架构如下:这是一张非常经典的MySQL的系统架构图,通过这…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 06/22 17:36
Next 06/22 17:36

相关推荐