有時候我們會遇到線上突然運作比較慢,需要檢視一下是否有慢查詢。正常情況配置中是不會打開慢日志查詢的,因為這個是消耗性能的,如果線上臨時打開,又不能重新開機資料庫,就需要通過指令線上設定。
查詢目前慢日志開啟狀态
mysql> show variables like 'slow_query%';
+---------------------+---------------------------------+
| Variable_name | Value |
+---------------------+---------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | D:\MysqlData\slow.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:\MysqlData\slow.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:\MysqlData\slow1.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:\MysqlData\slow1.log檔案,如下:
# Time: 2020-11-05T05:55:44.393317Z
# [email protected]: 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
配置檔案會随着資料庫的啟動而加載,如果修改了配置檔案,想要起作用需要重新開機資料庫服務。