mysql 慢查询开关、日志

时间:2022-09-18 09:43:01

MySQL给我们提供了一个很好的功能,那就是慢查询!所谓的慢查询就是通过设置来记录超过一定时间的SQL语句!那么如何应用慢查询呢?

1.开启MySQL的慢查询日志功能

默认情况下,MySQL是不会记录超过一定执行时间的SQL语句的。要开启这个功能,我们需要修改MySQL的配置文件:

windows下修改my.ini,(注册表,计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL57 路径下,ImagePath的“数据”--defaults-file 后的文件,就是mysql启动加载的配置文件,截图所示)

mysql 慢查询开关、日志

Linux下修改my.cnf文件。

在[mysqld]最后增加如下命令:

slow_query_log       #slow_query_log =0表示关闭,slow_query_log =1表示开启,不写参数表示开启

long_query_time = 0.1    #秒

命令查看开启状态 :show variables like '%query%';

mysql 慢查询开关、日志


2.测试慢查询日志功能

(1)进入MySql控制台,执行如下语句:

mysql> select sleep(2);
+----------+
| sleep(2) |
+----------+
|        0 |
+----------+
1 row in set (2.06 sec)


(2)查看慢查询日志文件,发现新增内容:

mysql 慢查询开关、日志


3.解释:
(1)slow_query_log 这句是开启记录慢查询功能,slow_query_log=0关闭;slow_query_log=1开启(这个1可以不写)

(2)long_query_time = 1 这句是记录超过1秒的SQL执行语句

(3)那么这个日志文件存放在什么地方呢?

默认是放在mysql的data目录,并且文件名为host_name-slow.log即 主机名-slow.log

mysql 慢查询开关、日志

(4)如果日志文件不想放在data目录,我们可以通过如下配置指定存放的目录及日志文件名:
slow_query_log_file=file_name
其中file_name就是你的存放日志的目录和文件名,在这里注意有的资料上可能是log-slow-queries=file_name,这个在mysql5.5版已经过时!

4.如何记录低于1s的慢查询记录呢?
MySQL5.21版以前long_query_time 参数的单位是秒,默认值是10。这相当于说最低只能记录执行时间超过 1 秒的查询,怎么记录查询时间超过100毫秒的SQL语句记录呢?在mysql5.21+后版本支持毫秒记录

(1)进入MySql控制台,运行如下sql语句:

set long_query_time=3;

mysql 慢查询开关、日志

该句是设置记录慢查询超过时间100ms的SQL,记住要重启mysql才能生效!
(2)测试

进入mysql控制台,执行如下sql语句:

select sleep(2); 查看日志,没有慢查询记录

select sleep(5);查看日志,有慢查询记录

mysql 慢查询开关、日志

-------------------------------------------------------------------------------------------

参考原文:https://www.jb51.net/article/38274.htm