mysql中慢查询日志之profiles的使用

mysql中慢查询日志的使用

慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。

long_query_time默认值为10s,默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。

//查看慢查询日志是否开启
show variables like ‘%slow_query_log%’;
mysql中慢查询日志之profiles的使用

//开启慢查询日志
set global slow_query_log=1;
mysql中慢查询日志之profiles的使用

//查看long_query_time参数
show variables like ‘long_query_time’;
mysql中慢查询日志之profiles的使用
默认10秒以上的sql语句记录到日志中

//修改long_query_time参数
set global long_query_time=0.1
mysql中慢查询日志之profiles的使用
修改后,需要重新连接或新开一个会话才能看到修改值

//查看索引的查询
show variables like ‘log_queries_not_using_indexes’;
mysql中慢查询日志之profiles的使用

//开启索引的查询
set global log_queries_not_using_indexes=1;
mysql中慢查询日志之profiles的使用



分析语句慢的原因:
开启慢查询日志以后去执行时间比较长的sql语句,再通过explain 或者profiles来分析语句。


  1. Show profiles; //显示当前所有连接的工作状态.
    mysql中慢查询日志之profiles的使用

注意以下情况:
converting HEAP to MyISAM 查询结果太大时,把结果放在磁盘 (语句写的不好,取数据太多)
create tmp table 创建临时表(如group时储存中间结果,说明索引建的不好)
Copying to tmp table on disk 把内存临时表复制到磁盘 (索引不好,表字段选的不好)
Sending data 一次性发送的数据量(数据量不能太大)

特别注意:
mysql 5.5 以后加了一个profile设置,可以观察到具体语句的执行步骤:
show variables like “profiling”; //查看profile是否开启
set profiling=on;//profile开启
mysql中慢查询日志之profiles的使用

show profile for query 5; //查看单条语句执行过程
mysql中慢查询日志之profiles的使用

show profile block io,cpu for query 2; //查看cup io等花费的时间
mysql中慢查询日志之profiles的使用