開啓慢查詢日誌
通過 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