开启慢查询日志
通过 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