MySQL中kill和show命令hang住一列的示例分析


这篇文章给大家分享的是有关MySQL中kill和show命令hang住一列的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。问题描述是这位朋友发给我的如下:问题描述
收到从库xx.xx.xx.xx报警mysql宕机,实际上mysql没有宕机,而是因为下面这条SQL向表tmp_mds_cust_dealer_advisor_rela01插入的数据太多(这个表的数据文件高达184G,binlog文件binlog.001675高达138G).在binlog最终刷到磁盘的期间导致 SHOW GLOBAL STATUS 等命令阻塞。观察了当时的cpu,内存,磁盘情况,压力都不大。为什么刷binlog到磁盘会阻塞 SHOW GLOBAL STATUS 等命令 ?show processlist如下:pstack
这位朋友给出了pstack 实际上是最有用的。实际上分析pstack可以发现,基本所有的等待线程可以分为:KILL SESSION等待等待的MUTEX为:SHOW GLOBAL STATUS等待等待的MUTEX为:实际上我们发现他们的共同点为都需要等待获取MUTEX:LOC开发云主机域名K_status,那么可以在整个pstack中试图找出获取LOCK_status的线程,实际上就是显然这也是一个show global status命令。而他正在等待获取另外一把MUTEX:LOCK_log如下:显然这里要获取的状态值Binlog_snapshot_position ,因此必须获取LOCK_log MUTEX,来保证没有并发的线程正在写入binlog物理文件,当然这里的写入是指写入操作系统的缓存而非FSYNC ,:那么堵塞线程 (LWP 17935) 的很可能是开始说的那个大事物正在做flush了因此我们找到slave的 sql_thread的栈帧如下:我们很清楚的看到这里正处于flush阶段源码中如下:本例子中等待MUTEX有如下的图:image.png因此我们能在show processlist中发现大量的会话都处于挂起状态。负载不高是因为这里基本都是MUTEX等待CPU负载不高,IO不高是因为这里处于的是flush阶段还没有做到FSYNC阶段。当然大事物是有可能堵塞SHOW GLOBAL STATUS 命令的,如本例。最后还是那句话MySQL不适合大事物。感谢各位的阅读!关于“MySQL中kill和show命令hang住一列的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

相关推荐: Phpmyadmin报错:Error During Session Start; Please Check Your PHP And/Or Webserver Log File And Config

小编给大家分享一下Phpmyadmin报错:Error During Session Start; Please Check Your PHP And/Or Webserver Log File And Config,希望大家阅读完这篇文章后大所收获,下面让我…

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

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/23 22:01
下一篇 06/23 22:01

相关推荐