慢SQL排查三板斧:SHOW PROCESSLIST + 慢查询日志 + EXPLAIN 实战
我是小耶干运营半路出家的野生DBA——写功课只是为了我踩过的坑你们别再踩了你们遇到过这种情况吗业务反馈页面转圈登录数据库一看CPU 100%。但不知道是哪个SQL干的。这时候别慌三条命令依次用。1. 先看当前在跑的查询sqlSHOW PROCESSLIST;结果里找Command列为QueryTime列数值大的那些。Time表示执行了多少秒越大越可疑。拿到Id可以直接KILL id。2. 打开慢查询日志提前做MySQL设置textslow_query_log ON long_query_time 2 slow_query_log_file /var/log/mysql/slow.log超过2秒的SQL会被记录。每天上班第一件事看一眼昨天的慢查询日志别等用户投诉。bashmysqldumpslow -s t /var/log/mysql/slow.log-s t按时间排序最慢的排前面。3. 抓到慢SQL后用EXPLAIN分析sqlEXPLAIN SELECT ...;重点看三列typeALL是全表扫描危险ref或range是走索引还行const是最优rows预估扫描的行数越大越慢Extra出现Using filesort或Using temporary说明有排序或临时表通常需要优化顺手记一个组合拳sqlEXPLAIN FORMATJSON SELECT ...;输出JSON格式能看到更详细的成本估算。适合出事故后写复盘报告用。小耶在手SQL不愁。你今天慢查询日志里抓到最慢的SQL跑了多少秒