MySQL - 慢查询日志

开启慢查询日志

通过 set 命令可以临时开启慢查询日志,MySQL 重启后修改丢失。如果想要永久开启,则需要修改配置文件,Linux 中是 /etc/my.conf 文件。

临时开启慢查询日志

mysql> set global slow_query_log = 1;
Query OK, 0 rows affected (1.80 sec)

mysql> show variables like '%slow_query_log%';
+---------------------+---------------------------------------------------------------+
| Variable_name       | Value                                                         |
+---------------------+---------------------------------------------------------------+
| slow_query_log      | ON                                                            |
| slow_query_log_file | D:\Program Files\phpStudy\MySQL\data\DESKTOP-QDO2CMR-slow.log |
+---------------------+---------------------------------------------------------------+
2 rows in set (0.00 sec)

永久开启慢查询日志

编辑 MySQL 配置文件,在 [mysqld] 配置后面增加两行:

slow_query_log=1
slow_query_log_file=D:\Program Files\phpStudy\MySQL\data\DESKTOP-QDO2CMR-slow.log

然后重启 MySQL 即可:

mysql> show variables like '%slow_query_log%';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    1
Current database: test

+---------------------+---------------------------------------------------------------+
| Variable_name       | Value                                                         |
+---------------------+---------------------------------------------------------------+
| slow_query_log      | ON                                                            |
| slow_query_log_file | D:\Program Files\phpStudy\MySQL\data\DESKTOP-QDO2CMR-slow.log |
+---------------------+---------------------------------------------------------------+
2 rows in set (1.01 sec)

慢查询阈值

MySQL 的慢查询阈值由变量 long_query_time 控制,默认 10 秒:

mysql> show variables like '%query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

通过 set global 临时修改慢查询阈值

修改完后,当前会话不会生效,需要重新连接:

mysql> set global long_query_time = 5;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

通过修改配置文件永久修改慢查询阈值

编辑 MySQL 配置文件,在 [mysqld] 配置后面增加两行:

long_query_time=2

然后重启 MySQL 即可:

mysql> show variables like '%query_time%';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    1
Current database: test

+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 2.000000 |
+-----------------+----------+
1 row in set (1.01 sec)

测试慢查询

Slow_queries 和日志格式

Slow_queries 全局值保存了触发慢查询的次数,日志文件中保存了具体导致慢查询的 SQL。日志文件内容格式如下:

# Time: 190922 11:55:15
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 5.000868  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1569124515;
select sleep(5);

测试时,可以在 select 时睡眠,延长查询时间:

mysql> show global status like '%slow_qu%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 0     |
+---------------+-------+
1 row in set (0.00 sec)

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

mysql> show global status like '%slow_qu%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 1     |
+---------------+-------+
1 row in set (0.39 sec)

通过 mysqldumpslow 等工具分析慢查询 SQL

参考这里:https://www.cnblogs.com/hjqjk/p/Mysqlslowlog.html

发布了295 篇原创文章 · 获赞 158 · 访问量 101万+

猜你喜欢

转载自blog.csdn.net/kikajack/article/details/101151241