Skip to content

MySQL 监控和处理慢查询

什么是慢查询

慢查询 是指一条 SQL 的执行时间太长。比如在一个有100w条数据的表中,查询一条数据时未命中索引,从而通过全表扫描查询数据,这个查询会耗时很长。这就是一个 Long SQL 。类似,更新数据、删除数据也可能出现慢查询 。

慢查询,会对业务产生负面影响:

  • 业务响应太慢。
  • 连接数暴涨。

如何发现慢查询 ?

方法1:

使用 show processlist 查看MySQL 线程情况,若有 Command 为 Query ,Time 很大的线程在列表中,那么这个线程就是在执行一个慢查询。Info 字段能看出来对应的 SQL 。

select * from information_schema.processlist 效果和 show processlist 相同。

示例:

json
mysql> show processlist \G
***************************[ 1. row ]***************************
Id      | 2
User    | root
Host    | localhost:52376
db      | <null>
Command | Query
Time    | 0
State   | init
Info    | show processlist

show processlist 官方文档

方法2:

开启慢查询日志,实时解析日志内容。

略。

如何处理不可接受的慢查询?

如果慢查询在意料之中,可接受,那么不用处理。否则应该:

  • 干掉此次的慢查询。使用 kill <id> ,id 是 show processlist 返回的 Id 。
  • 优化SQL、索引等,防止再次出现慢查询。