【趙渝強老師】MySQL的慢查詢日誌

赵渝强老师發表於2024-11-20

MySQL的慢查詢日誌可以把超過引數long_query_time時間的所有SQL語句記錄進來,幫助DBA人員最佳化所有有問題的SQL語句。透過mysqldumpslow工具可以檢視慢查詢日誌。

影片講解如下:
https://www.bilibili.com/video/BV1riYZegE7o/?aid=112946801869...

下面透過具體的演示來說明如何使用MySQL的慢查詢日誌。

(1)檢視是否開啟了慢查詢日誌功能

mysql> show variables like '%slow_query%';

# 輸出的資訊如下:
+---------------------+----------------------------------------+
| Variable_name       | Value                                  |
+---------------------+----------------------------------------+
| slow_query_log      | OFF                                    |
| slow_query_log_file | /usr/local/mysql/data/mysql11-slow.log |
+---------------------+----------------------------------------+
# 其中:
# slow_query_log:是否慢查詢開啟狀態。
# slow_query_log_file:指定慢查詢日誌存放的位置。
提示:可以透過設定引數“long_query_time”來指定查詢超過多少秒才記錄,該引數的預設值是10秒。

(2)臨時啟用慢查詢日誌

mysql> set global slow_query_log='ON';
mysql> set session long_query_time=2;  
提示:如果需要永久啟用慢查詢日誌,可以修改配置檔案“/etc/mysql.cnf”增加下面的內容,並重啟MySQL。
[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/mysql11-slow.log
long_query_time = 2

(3)檢視當前的慢查詢日誌設定

mysql> show variables like '%slow_query_log%';

# 輸出的資訊如下:
+---------------------+----------------------------------------+
| Variable_name       | Value                                  |
+---------------------+----------------------------------------+
| slow_query_log      | ON                                     |
| slow_query_log_file | /usr/local/mysql/data/mysql11-slow.log |
+---------------------+----------------------------------------+

mysql> show variables like '%long_query_time%';

# 輸出的資訊如下:
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 2.000000 |
+-----------------+----------+

(4)手動觸發一個慢查詢。

mysql> select sleep(3);

(5)檢視慢查詢日誌

cat /usr/local/mysql/data/mysql11-slow.log

# 輸出的資訊如下:
/usr/local/mysql/bin/mysqld, Version: 8.0.20 (MySQL Community Server - GPL). started with:
Tcp port: 3306  Unix socket: /tmp/mysql.sock

Time                 Id Command    Argument
# Time: 2022-02-20T03:37:12.626943Z
# User@Host: root[root] @ localhost []  Id:     8
# Query_time:3.000572 Lock_time: 0.000000 Rows_sent:1 Rows_examined: 1

use demo1;
SET timestamp=1645328229;
select sleep(3);
提示:慢查詢日誌也可以使用“mysqldumpslow”指令進行檢視,例如:
mysqldumpslow /usr/local/mysql/data/mysql11-slow.log

相關文章