欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

记录一次子查询引起的宕机

程序员文章站 2022-05-31 19:27:48
...

今天早上(5月10日)10:52收到短信报警,XXX业务数据库宕机,由于今天一直忙各种问题,所以晚上清闲了才得以排查。我们先看下报警信息,如图:从10:41开始,服务

今天早上(5月10日)10:52收到短信报警,网站空间,XXX业务数据库宕机,由于今天一直忙各种问题,所以晚上清闲了才得以排查。


我们先看下报警信息,如图:

记录一次子查询引起的宕机

从10:41开始,服务器的SWAP分区报警,之后内存不足报警,再最后内存耗尽被HANG死,导致机器死机。


我分析了慢日志,结果一条统计的SQL语句直接把服务器给搞死了。


这肯定是人为执行的,虚拟主机,从跳板机98.149上登陆SQLYOG上执行的,美国空间,如图:

记录一次子查询引起的宕机

耗时170秒,而且还是在主库,有业务的机器上运行,导致锁表,其他的进程一直等待,最后越积越多,直接把服务器就给跑崩了。


晚上,我在备库上又执行了一次这条SQL,花费了11分26秒(随着这个表的增大时间还会变慢),……………………

记录一次子查询引起的宕机


MySQL5.1和MySQL5.5对子查询的性能可谓是相当的差,垃圾中的战斗机,所以必须改用表连接方式进行优化,除非今年刚上市的MySQL5.6,所以这条SQL可以这样优化。

记录一次子查询引起的宕机

记录一次子查询引起的宕机

只需要0.01秒就出结果。


所以,我在这里提醒大家一下,凡是这种统计的SQL,而且很复杂的,千万不要在主库上运行,子查询目前的性能还很差。


(注:51CTO新改版后的图片显示很小,如果想看大图,请下载附件里的压缩文件。)



本文出自 “贺春旸的技术专栏” 博客,请务必保留此出处