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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章