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执行过程中每个线程的状态和消耗的时间:

原文地址:https://www.cnblogs.com/654wangzai321/p/14445893.html