专栏名称: DBAplus社群
围绕数据库、大数据、PaaS云,顶级大咖、技术干货,运营几个月受众过十万!成为运维圈最专注围绕“数据”的学习交流和专业社群!欢迎投稿,加入探讨。
目录
相关文章推荐
AustinDatabases  ·  哎,马上删,马上 ·  18 小时前  
终码一生  ·  如何加快 SQL 查询速度的同时保持 ... ·  昨天  
数据中心运维管理  ·  弱电智能化中究竟有多少个子系统? ·  3 天前  
数据中心运维管理  ·  超大规模数据中心如何重新思考冷却效率 ·  4 天前  
数据中心运维管理  ·  锂电池火灾处理难度 ·  3 天前  
51好读  ›  专栏  ›  DBAplus社群

MySQL所有操作hang住了,怎么破?

DBAplus社群  · 公众号  · 数据库  · 2017-05-17 07:22

正文

请到「今天看啥」查看全文



shell>mysql  -S /var/lib/mysql/mysql.sock  -uabc -pabc


2、查看错误日志


错误日志完全正常,无任何错误日志报出。


3、使用pstack

使用pstack工具查看进程内各个线程的堆栈信息。执行命令:


shell>pstack >  pstack.log


将堆栈日志存放到pstack.log文件中,分析堆栈日志的内容。发现存在很多线程处于等待线程互斥量mutex的状态,并且等待的mutex是两个不同的mutex,猜测是因为源码内存在bug,所以造成了进程死锁:




其中线程2和线程3分别在等待不同的mutex。



而其它新连接或者已经连接无应答的进程,也在等待其中的一个mutex。


4、使用gdb查看具体信息

执行如下命令attach到mysqld进程,查看当前线程堆栈的具体情况。


shell>gdb -p


执行命令info thread查看线程的具体信息,发现很多线程均在等待锁信息。通过上面描述的pstack日志信息,我们知道线程2和线程3存在等待不同锁的行为且可疑性比较高。



切换到线程2查看,线程在等待的mutex为LOCK_index。



切换到线程3查看,线程在等待的mutex为LOCK_thread_count。



由此猜测,是源码中由于存在LOCK_index和LOCK_thread_count相互等待的BUG,导致两个mutex均未被释放,从而发生死锁情况。其它需要获得锁的操作均发生一致等待的情况(即发生hang住)。







请到「今天看啥」查看全文


推荐文章
AustinDatabases  ·  哎,马上删,马上
18 小时前
数据中心运维管理  ·  弱电智能化中究竟有多少个子系统?
3 天前
数据中心运维管理  ·  超大规模数据中心如何重新思考冷却效率
4 天前
数据中心运维管理  ·  锂电池火灾处理难度
3 天前
脑洞故事板  ·  托生丨论菜刀的正确使用方法
8 年前
娱乐羊毛赚  ·  鹏华基金 简单领取12元话费,秒到账!
8 年前