转载自:https://blog.csdn.net/m_nanle_xiaobudiu/article/details/79288257
MySQL的慢查询日志可以用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过 long_query_time 值的SQL,则会被记录到慢查询日志中(日志可以写入文件或者数据库表,如果对性能要求高的话,建议写文件)。默认情况下,MySQL数据库是不开启慢查询日志的,long_query_time的默认值为10(即10秒,通常设置为1秒),即运行10秒以上的语句是慢查询语句。
一般来说,慢查询发生在大表(比如:一个表的数据量有几百万),且查询条件的字段没有建立索引,此时,要匹配查询条件的字段会进行全表扫描,耗时超过 long_query_time,则为慢查询语句。
慢查询日志设置
-
临时开启慢查询日志
通过set global slow_query_log = on;
开启慢查询,off表示关闭。 -
临时设置慢查询时间阈值
通过set long_query_time = 1;
可以设置慢查询时间阈值,这里设置为1s。 -
设置慢查询存储的方式
set globle log_output = file;
可以查看慢查询日志的输出格式,可以设置为TABLE或FILE,或者FILE,TABLE。
show variables like '%log_output%'
可以查看慢查询日志的输出格式。 -
查询慢查询日志的开启状态和慢查询日志储存的位置
show variables like '%query%';
(1)slow_query_log: ON为开启慢查询日志,OFF则为关闭慢查询日志。
(2)long_query_time: 慢查询的阈值,默认值为10秒。
(3)slow_query_log_file: 慢查询日志文件路径
(4)log_queries_not_using_indexes: 如果值设置为ON,则会记录所有没有利用索引的查询(性能优化时开启此项,平时不要开启) -
永久设置慢查询日志
需要配置在mysql配置文件中配置,一般默认在/etc/my.cnf
更改对应参数即可。
慢查询日志进行分析
慢查询日志一般比较大,可能一天会产生几个G的日志,根本没有办法去清晰明了的分析。
1、使用mysqldumpslow进行分析
mysqldumpslow -t 10 /data/mysql/mysql-slow.log
显示出慢查询日志中最慢的10条sql
2、使用pt-query-digest工具进行分析
mysqldumpslow是mysql安装后就自带的工具,用于分析慢查询日志,但是pt-query-digest却不是mysql自带的,如果想使用pt-query-digest进行慢查询日志的分析,则需要自己安装pt-query-digest。详情参见:https://blog.csdn.net/m_nanle_xiaobudiu/article/details/79288257