首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 服務器調優三部曲:硬體、配置、慢查詢日誌

     編輯:MySQL 資料庫相關知識

    調優層級與收益遞增

    1. 更換硬體:CPU/磁碟/記憶體翻倍,收益線性但有上限
    2. 調整 mysqld 配置:記憶體分配、執行緒、快取、I/O 模式,收益顯著且成本低
    3. 優化查詢與索引:根治 90% 以上效能問題,投入產出比最高

    本文聚焦第 2、3 層:配置 mysqld 並建立慢查詢可觀測體系。

    關鍵配置參數 (my.cnf [mysqld] 區段)

    參數建議值/原則說明
    innodb_buffer_pool_size物理記憶體 60-80%InnoDB 核心快取,資料+索引+鎖+插入緩衝,越大越少磁碟 I/O
    innodb_log_file_size1-4 GB大檔案減少 checkpoint 頻率,寫入效能提升
    innodb_flush_log_at_trx_commit1 (安全) / 2 (效能)1=每次提交 fsync,2=每秒 fsync,0=依賴 OS
    max_connections應用峰值 + 余量配合 thread_pool 或連線池避免爆連接
    table_open_cache4000+減少 .frm 重複開關開銷
    query_cache_type0 (關閉)高並發下鎖爭用嚴重,8.0 已移除
    slow_query_logON啟用慢查詢日誌
    long_query_time1-2 (秒)閾值,視業務調整
    log_queries_not_using_indexesON記錄未用索引查詢 (即使快)

    建立慢查詢可觀測體系

    1. 啟用慢查詢日誌

    [mysqld]
    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/slow.log
    long_query_time = 2
    log_queries_not_using_indexes = 1

    2. 使用 mysqldumpslow 分析

    mysqldumpslow -s t -t 20 /var/log/mysql/slow.log
    # -s t: 按總耗時排序
    # -t 20: 顯示前 20
    # 自動抽象化參數值,同模式查詢合併統計

    3. 進階:pt-query-digest (Percona Toolkit)

    pt-query-digest /var/log/mysql/slow.log --limit 20 --filter '$event->{Query_time} > 1'

    輸出含:執行次數、總/平均/最大耗時、掃描行數、回傳行數、索引使用率、EXPLAIN 計畫、優化建議。

    實戰調優閉環

    1. 收集慢查詢 Top 20
    2. EXPLAIN 分析執行計畫:type=ALL 全表掃描、key=NULL 無索引、rows 巨大
    3. 補索引、改寫 SQL、調整驅動表順序
    4. 驗證效果:FLUSH LOGS 切割日誌,觀察次日 Top 榜變化
    5. 持續迭代

    硬體層快速檢查清單

    • iostat -x 1:%util > 80% 或 await > 20ms → 磁碟瓶頸
    • vmstat 1:wa (I/O wait) 持續 > 20% → 磁碟/記憶體壓力
    • free -h:available 過低 → 擴充記憶體或降低 innodb_buffer_pool_size
    • top -H:mysqld 佔用單核 100% → 單查詢無法並行,需改寫或升級 CPU
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved