由于MySQL慢查询而导致的故障

由于MySQL慢查询而导致的故障
我们知道,分析MySQL语句查询性能方法不仅是使用解释输出执行计划,而且还要使MySQL能够记录超过指定时间的语句,我们将查询指定时间上的SQL语句作为慢速查询。

1。原因

研究一个反应数据库死在会话或未连接的后面,或者必须花费大量时间返回结果,甚至是一个简单的查询。

两。治疗

首先监测平台查看服务器和数据库状态,并发现该数据库有大量的慢查询。继续看服务器监控,CPU平均使用率高,IO读写平均值。登录到MySQL,使用显示列表以总分600 +观会话状态,这是不正常的。你看慢查询日志,发现问题主要集中在几个SQL,有笔,计数,等同的操作,等等。MySQL服务器的long_query_time设置为3秒,和一个简单的查询需要几十秒,这是显然是有问题的。写一个脚本来尝试杀掉相关的会议,发现没用,还是有很多的联系。在这一点上,你用上查看服务器状态,和mysqld进程占用的内存和CPU。

失败期间的慢查询数,例如:
CPU的平均使用率,如图所示:
然后使用显示完整的列表视图的整体状况,并在上面找到一些SQL,这些SQL操作都使用子查询的执行,和时间列竟达到30000秒,并转换为近10 hours.explain这些陈述实际上出现使用临时用filesort,你可以看到,这些陈述是可怕的。所以发展确认,它是把这些对话杀迫切。目前,会话数量下降迅速。只有100 +,顶看mysqld进程,以及内存和CPU趋于下降。然后发展分析说,SQL是写在凌晨9点,发现了问题并注明。新的代码没有这样的SQL,但是先前的连接将不会被释放。之间解决问题问题的时间差可以对应添加子查询的时间,并有可能确认查询是故障的罪魁祸首。

三。总结

通过这次失败,总结了以下几点。

MySQL时应尽量避免使用子查询。即使它们被使用,我们也应该清楚大表和小表之间的关系。
对这些问题的调查:
首先,检查服务器监控和MySQL监控,分析服务器和MySQL的性能,找出异常。

第二,如果它是一个缓慢的查询,请查看慢的查询日志,找出问题SQL,尝试优化,或者缓存结果;

第三,分清主要和次要,先解决大问题,然后解决小问题,解决大问题,小问题就解决了,比如,长时间的会话中断掉了,后期连接正常。

第四,总结与分析。

有效的沟通会事半功倍。
DBA需要定期给顶部的SQL(类Oracle)提供开发和帮助优化;
在检查监控时,无论是服务器监控还是MySQL监控,我们都需要进行比较,例如,与昨天同一时间,甚至前天相比,这将更快地找到问题所在。
四。技能

最后,附上一个快速杀MySQL会话。

首先,下面的语句用于分析有问题的SQL:

/ usr /局部/ MySQL /斌/ MySQL -中- p'xxx E显示完整的列表更|;

然后结果显示完整的列表保存到一个文件

/ usr /局部/ MySQL /斌/ MySQL -中- p'xxx

-显示完整的列表| ;

grepXXXawk {打印1美元}> mysql_slow.txt |

最后,使用以下简单的shell脚本删除相关会话:
选择连接(杀,ID,';')
从information_schema.processlist
在信息like'xxx;
当然,您还可以使用以下SQL拼接语句:

选择连接(杀,ID,';')
从information_schema.processlist
在信息like'xxx;
本文全面分析了mysql慢速查询的原因、处理方法和技巧,希望能帮助您更好地理解mysql的慢查询。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部