mysql慢查询问题查找
1. 慢查询日志
#该参数用来控制慢查询日志是否开启
slow_query_log=1
#来指定慢查询日志的文件名
slow_query_log_file=slow_query.log
#用来配置查询的时间限制, 超过这个时间将认为值慢查询, 将需要进行日志记录, 默认10s
long_query_time=10
2. show processlist
通过show processlist命令查看当前MySQL在进行的线程,包括线程的状态、是否锁表等,可以实时地查看 SQL 的执行情况.
1)command列,显示当前连接的执行的命令,一般取值为休眠(sleep),查询(query),连接(connect)等
2)time列,显示这个状态持续的时间,单位是秒
3)state列,显示使用当前连接的sql语句的状态,很重要的列。state描述的是语句执行中的某一个状态。一 个sql语句,以查询为例,可能需要经过copying to tmp table、sorting result、sending data等状态 才可以完成
4)info列,显示这个sql语句,是判断问题语句的一个重要依据
3. explain分析执行计划
通过以上步骤查询到效率低的 SQL 语句后,可以通过 EXPLAIN或者 DESC命令获取 MySQL如何执行 SELECT 语句 的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序。
说明:一般来说, 我们需要保证查询至少达到 range 级别, 最好达到ref
explain 之 extra
4. show profile分析SQL
show profiles 能够在做SQL优化时 帮助我们了解时间都耗费到哪里去了
通过 have_profiling 参数,能够看到当前MySQL是否支持profile:
默认profiling是关闭的,可以通过set语句在Session级别开启profiling:
set profiling=1; //开启profiling 开关;
执行完sql语句之后,再执行show profiles 指令, 来查看SQL语句执行的耗时:
通过show profile for query query_id 语句可以查看到该SQL执行过程中每个线程的状态和消耗的时间: