简介
- 他是一种日志记录,用来记录在MySql中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL,会被记录到慢查询日志中
- long_query_time的默认值为10,运行超过10s以上的语句就会被记录
- 默认情况下,MYSQL数据库不会开启慢查询日志,需要我们手动来设置这个参数。
- 一般不需要调优的话,不建议启动该参数,因为开启慢查询日志或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件
查看
SHOW VARIABLES LIKE '%slow_query_log%';
我们输入一个慢的sql
SELECT SLEEP(20);
查看日志如下
# Time: 2023-06-21T01:15:18.324013Z
# User@Host: root[root] @ localhost [127.0.0.1] Id: 8
# Query_time: 20.000378 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1
use hcm_test;
SET timestamp=1687310098;
select sleep(20);
开启
SET GLOBAL slow_query_log=1;
- 开启后只针对当前数据库生效,如果mysql重启后,那么就会失效
- 如果想要永久生效,那么必须修改my.cnf文件(其他的系统变量也是如此)
- [mysqld]下增加或修改参数,
slow_query_log
和slow_query_log_file
后,然后重启MySQL服务器 - slow_query_log =1
- slow_query_log_file=/var/lib/mysql/xxx.log
- long_query_time=3;
- log_output=FILE
- [mysqld]下增加或修改参数,
slow_query_log_file
- 它指定慢查询日志文件的存放路径
- 系统默认会给一个缺省的文件host_name-slow.log(如果没有指定参数slow_query_log_file的话)
- 通过一下命令可以查看日志存放的路径
SHOW VARIABLES LIKE 'slow_query_log_file%';
使用
查看多少秒算慢
SHOW VARIABLES LIKE 'long_query_time%';
修改
SET GLOBAL long_query_time=1;
这个命令是修改成1s,但是我们再次查询会发现他的值还是10s,这个时候我们需要新打开一个会话的窗口才行,或者我们可以修改当前会话的变量
SET SESSION long_query_time=1;
查询
SHOW VARIABLES LIKE '%long_query_time%';
查询当前系统有多少条慢查询记录
模仿一下慢查询
SELECT SLEEP(20);
查询慢查询记录
SHOW GLOBAL STATUS LIKE '%Slow_queries%';