資料庫調優非單點突破,需從減少存取、硬體選型、作業系統、架構設計、MySQL 參數、應用層六大維度系統性佈局。本文梳理完整調優知識體系。
APM 工具(Pinpoint、SkyWalking)、前端埋點、SLA 追蹤
SHOW GLOBAL STATUS;
-- 關鍵指標
Key_read_requests / Key_reads -- MyISAM 索引命中率,目標 > 99.9%
Innodb_buffer_pool_read_requests / Innodb_buffer_pool_reads -- InnoDB 命中率
Open_tables / Opened_tables -- table_cache 適配度
Threads_connected / Threads_running -- 並發壓力
Slow_queries -- 慢查詢累計
mysqlreport、mytop、pt-query-digesttop、iostat -x 1、sar -d 1、free -hslow_query_log、error_log| 元件 | 優先級 | 建議 |
|---|---|---|
| 磁碟 I/O | ⭐⭐⭐⭐⭐ | NVMe SSD > RAID10 SAS SSD > RAID10 HDD;避免 RAID5/6 |
| 記憶體 | ⭐⭐⭐⭐ | ≥64GB,支援大緩衝池;ECC 必選 |
| CPU | ⭐⭐⭐ | 高主頻 > 多核心(MySQL 單執行緒效能敏感);推薦 3.0GHz+ |
| 網路 | ⭐⭐ | 萬兆網卡 + 專用交換機;主從同步網路隔離 |
# 1. 關閉 Swap 或極度限制
vm.swappiness = 1
# 2. 檔案描述符
ulimit -n 655350
# 3. 進程/執行緒限制
ulimit -u 655350
# 4. 磁碟排程器(SSD)
echo none > /sys/block/nvme0n1/queue/scheduler
# 5. 透明大頁(建議關閉)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 6. NUMA 綁定
numactl --interleave=all mysqld ...
| 參數 | 建議值 | 說明 |
|---|---|---|
| innodb_buffer_pool_size | 物理記憶體 70-80% | 核心緩衝池,數據+索引+鎖+自適應雜湊 |
| innodb_buffer_pool_instances | 1-8(每實例 ≥1GB) | 減少全域鎖競爭 |
| innodb_log_file_size | 1-4GB | 大日誌減少檢查點衝刷,崩潰恢復較慢 |
| innodb_log_buffer_size | 16-64MB | 大事務需調大 |
| innodb_flush_log_at_trx_commit | 1(金融)/ 2(一般) | 1=最安全,2=每秒刷盤,0=最高效能但可能丟 1 秒 |
| innodb_flush_method | O_DIRECT | 繞過 OS 雙重快取 |
| innodb_io_capacity | 磁碟實測 IOPS × 0.8 | 控制背景刷頁速率 |
| innodb_page_cleaners | 4-8 (5.7+) | 並行刷頁執行緒 |
| max_connections | 2000-5000 | 配合 thread_cache_size |
| table_open_cache | 4000-10000 | 配合 Open_tables 監控 |
SELECT *,明確列名WHERE YEAR(dt) = 2023 → WHERE dt >= '2023-01-01' AND dt < '2024-01-01'pt-online-schema-change、gh-ost每日:慢查詢 TOP 10 分析 → 索引優化/SQL 重寫
每週:SHOW GLOBAL STATUS 基線對比 → 參數微調
每月:容量規劃(資料增長、QPS 趨勢) → 架構擴容決策
每季:版本升級評估、安全補丁、備份恢復演練
調優無終點,唯有建立「監控→分析→優化→驗證」閉環,才能持續釋放資料庫效能。