有时候我们会遇到线上突然运行比较慢,需要查看一下是否有慢查询。正常情况配置中是不会打开慢日志查询的,因为这个是消耗性能的,如果线上临时打开,又不能重启数据库,就需要通过命令在线设置。
查询当前慢日志开启状态
mysql> show variables like 'slow_query%';
+---------------------+---------------------------------+
| Variable_name | Value |
+---------------------+---------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | D:MysqlDataslow.log |
+---------------------+---------------------------------+
2 rows in set (0.01 sec)
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.01 sec)
可以看到当前慢日志查询开启状态是OFF,目录是D:MysqlDataslow.log,查询时间是10秒。
开启慢日志查询设置对应参数
mysql> set global slow_query_log='ON';
Query OK, 0 rows affected (0.03 sec)
mysql> set global slow_query_log_file='D:\MysqlData\slow1.log';
Query OK, 0 rows affected (0.02 sec)
mysql> set global long_query_time=1;
Query OK, 0 rows affected (0.00 sec)
我们打开了慢日志查询,设定了慢日志的目录和文件名,设置了慢日志的时间。
查看状态确认修改成功
mysql> show variables like 'slow_query%';
+---------------------+------------------------+
| Variable_name | Value |
+---------------------+------------------------+
| slow_query_log | ON |
| slow_query_log_file | D:MysqlDataslow1.log |
+---------------------+------------------------+
2 rows in set (0.00 sec)
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
我们发现long_query_time还是10秒,这个更新需要我们重新连接一下。退出当前链接,重新登录查看:
mysql> show variables like 'long_query_time';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set (0.01 sec)
我们看到查询时间已经变了。
测试
执行一条慢查询
select sleep(2);
查看D:MysqlDataslow1.log文件,如下:
# Time: 2020-11-05T05:55:44.393317Z
# User@Host: root[root] @ localhost [::1] Id: 4
# Query_time: 2.000115 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1604555744;
select sleep(2);
配置文件
除了在线打开,也可以在配置文件中配置,一般不建议打开,会影响性能。
[mysqld]
slow-query-log=1
slow_query_log_file="slow.log"
long_query_time=10
配置文件会随着数据库的启动而加载,如果修改了配置文件,想要起作用需要重启数据库服务。