我们知道,分析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的慢查询。