首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 慢查詢日誌完整指南 (上):開啟、參數設定、測試驗證與日誌分析

     編輯:MySQL 綜合教學

慢查詢日誌用途

記錄執行時間超過 long_query_time 的 SQL,幫助定位效能瓶頸、優化索引、改寫查詢。

核心參數

參數預設值建議值說明
slow_query_logOFFON總開關
slow_query_log_filehost-slow.log/var/log/mysql/slow.log日誌路徑 (需 mysql 寫入權限)
long_query_time10 秒1~2 秒閾值,可設定浮點數 (如 0.5)
log_queries_not_using_indexesOFFON (謹慎)記錄無索引查詢,量大慎開
log_slow_admin_statementsOFFON記錄管理指令 (ALTER, ANALYZE 等)
log_slow_slave_statementsOFFON記錄 Slave 執行慢的複寫 SQL

配置範例 (my.cnf)

[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = ON
log_slow_admin_statements = ON
log_slow_slave_statements = ON

# 可選:輸出到資料表 (5.1+)
log_output = FILE,TABLE

生效方式

  1. 修改 my.cnf 後 systemctl restart mysqld (永久)。
  2. 運行時動態調整 (重啟失效):
    SET GLOBAL slow_query_log = ON;
    SET GLOBAL long_query_time = 1.5;
    SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';

測試驗證

-- 1. 閾值內不記錄
SELECT 1;  -- 0.00 sec

-- 2. 超過閾值記錄
SELECT SLEEP(3);  -- 3.00 sec → 寫入 slow.log

-- 3. 檢查日誌內容
sudo cat /var/log/mysql/mysql-slow.log

慢查詢日誌格式解析

# Time: 2024-01-15T03:15:22.123456Z
# User@Host: root[root] @ localhost [127.0.0.1]  Id: 10
# Query_time: 3.000123  Lock_time: 0.000001  Rows_sent: 1  Rows_examined: 1
SET timestamp=1705288522;
SELECT SLEEP(3);
  • Query_time:總耗時 (秒)。
  • Lock_time:等待鎖時間。
  • Rows_sent:回傳列數。
  • Rows_examined:掃描列數 (關鍵,遠大於 Rows_sent 表示全表掃描)。

日誌輪轉 (logrotate)

/var/log/mysql/mysql-slow.log {
    daily
    rotate 30
    compress
    missingok
    notifempty
    create 640 mysql mysql
    sharedscripts
    postrotate
        mysqladmin flush-logs > /dev/null 2>&1 || true
    endscript
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved