Mysql应用一次MySQL慢查询导致的故障
《Mysql应用一次MySQL慢查询导致的故障》要点: 我们知道分析MySQL语句查询性能的方法除了使用EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”.MYSQL实例 一、?起因 二、?处理 故障期间的慢查询数,如图:MYSQL实例 MYSQL实例 CPU 平均使用率,如图:MYSQL实例 MYSQL实例 接着使用 SHOW FULL PROCESSLIST 查看完整状态,在最上面居然发现几条 SQL.这些 SQL 操作使用子查询实现,TIME 列居然达到了 30000 秒,折算过来差不多 10 小时.EXPLAIN 这些语句,居然出现了 USING TEMPORY 和 USING FILESORT,可以看出这些语句是很糟糕的.于是跟开发确认,紧急把这些会话 kill 掉.稍等片刻,会话数立马降下来,只有 100+,top 查看 mysqld 进程,内存和 CPU 都呈现下降的趋势.接着分析开发说上午 9 时写了这些 SQL,发现有问题,注释掉了.新的代码虽然没有此类 SQL,但之前建立的连接并不会释放.解决问题和出现问题的时间差刚好可以和添加子查询的时间对应,就可以确认子查询是此次故障的罪魁祸首.MYSQL实例 三、?总结
第一,查看服务器监控和 MySQL 监控,分析服务器以及 MySQL 性能,找出异常;
四、?技巧 首先使用如下语句分析出有问题的 SQL:MYSQL实例 /usr/local/mysql/bin/mysql -uroot -p'XXX' -e "SHOW FULL PROCESSLIST;" | moreMYSQL实例 然后将 SHOW FULL PROCESSLIST 的结果保存到一个文件:MYSQL实例 /usr/local/mysql/bin/mysql -uroot -p'XXX' 最后使用如下简单的 Shell 脚本 kill 掉相关会话:MYSQL实例 SELECT concat('kill ',id,';') FROM information_schema.processlist WHERE info like 'XXX'; 当然也可以使用如下 SQL 拼接 kill 语句: SELECT concat('kill ',';') FROM information_schema.processlist WHERE info like 'XXX'; 本文对MySQL慢查询导致故障的起因,处理方法,所需的技巧进行了全面分析,希望可以让大家更好的了解MySQL慢查询,对大家的.MYSQL实例 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |