这篇文章给大家分享的是有关如何查看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张,这是因为My免费主机域名sql 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锁等待的原因”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
相关推荐: SQL Server 2014怎么使用游标循环向远端数据库插入数据
这篇文章给大家分享的是有关SQL Server 2014怎么使用游标循环向远端数据库插入数据的内容。小编觉得挺实免费主机域名用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先在远端数据库建立链接服务器。把远端数据库上的相应表结构都建好。以Company…