優化三大鐵律
- 記憶體 > 磁碟:記憶體存取速度是磁碟的 10⁴~10⁵ 倍
- 熱數據留記憶體:減少物理 I/O,提升吞吐
- 索引優於數據:索引體積小、命中率高,優先緩存索引
關鍵緩衝區配置
| 緩衝區 | 參數 | 適用引擎 | 調優建議 |
| 表緩存 | table_open_cache (舊 table_cache) | 所有 | 監控 Opened_tables 激增時調大,典型 2048~65536 |
| 索引緩存 | key_buffer_size | MyISAM/ISAM | 專用機設物理記憶體 25~30%,如 4GB 機給 1GB |
| InnoDB 緩衝池 | innodb_buffer_pool_size | InnoDB | 核心參數,專用機設 60~80% 物理記憶體 |
| InnoDB 日誌緩存 | innodb_log_buffer_size | InnoDB | 大事務場景調大至 64MB~256MB |
| BDB 緩存 | bdb_cache_size | BDB | 同理調整 |
| 查詢緩存 | query_cache_size / limit / type | 所有 | 高併發寫入場景建議關閉 (type=0),讀多寫少可開 64~256MB |
服務器層面優化
- 禁用不用引擎:編譯時
--without-isam --without-innodb --without-bdb
- 權限表簡單化:減少權限檢查開銷
- 靜態編譯:
--with-mysqld-ldflags=-all-static 提升 5~10% 效能(但不可用 UDF)
硬體升級優先級
- 記憶體:單一最大影響因子,直接決定緩存命中率
- 高速磁碟陣列:RAID 10 + SSD/NVMe,降低延遲、提升 IOPS
- I/O 分離:資料、日誌、備份、tmpdir 分置不同物理磁碟
- 多核 CPU:MySQL 多線程架構受益於多核並行
實戰檢查清單
-- 檢查表緩存是否足夠
SHOW GLOBAL STATUS LIKE 'Opened_tables';
SHOW GLOBAL VARIABLES LIKE 'table_open_cache';
-- 檢查索引緩存命中率
SHOW GLOBAL STATUS LIKE 'Key_read%';
-- Key_reads / Key_read_requests < 0.01 為佳
-- 檢查 InnoDB 緩衝池命中率
SHOW ENGINE INNODB STATUS\G
-- 觀察 Buffer pool hit rate