MySQL 效能優化的三大黃金法則:
控制參數:table_open_cache(舊版 table_cache)。
監控指標:Opened_tables 狀態變量。若該值快速增長,說明表緩存不足,頻繁打開/關閉表文件。
SHOW STATUS LIKE 'Opened_tables';
控制參數:key_buffer_size。默認 8MB,內存充足時建議設置為物理內存的 25%~30%(僅限 MyISAM 引擎)。
innodb_buffer_pool_size:核心參數,建議設置為物理內存的 60%~80%(專用 DB 服務器)。innodb_log_buffer_size:重做日志緩衝,默認 16MB,大事務場景可適當調大(如 64MB~256MB)。參數:bdb_cache_size(BDB 引擎已棄用,現代版本可忽略)。
注意:MySQL 8.0 已移除 Query Cache。 適用於 5.7 及之前版本:
query_cache_size:緩存總大小,0 表示禁用。建議 16MB~128MB,過大反而增加鎖競爭。query_cache_limit:單次查詢結果最大緩存體積,超過不緩存。query_cache_type:0=關閉,1=默認緩存(SQL_NO_CACHE 除外),2=按需緩存(SQL_CACHE 才緩存)。客戶端可通過 SET SESSION query_cache_type = 0|1|2 動態控制。
--without-innodb、--without-bdb 等減少內存佔用。GRANT 層級,降低權限檢查開銷。mysqld 可提升 5%~10% 效能,但無法加載 UDF(用戶自定義函數)。| 硬體組件 | 優化方向 | 說明 |
|---|---|---|
| 內存 (RAM) | 最大化容量 | 單一最關鍵因素,直接決定緩衝池大小,減少磁碟 I/O |
| 存儲系統 | 高速磁碟陣列 | 採用 NVMe SSD 或 RAID 10,降低延遲,提升 IOPS |
| I/O 分布 | 多設備分散 | 將數據、日志、臨時文件分佈不同物理磁碟,消除資源競爭 |
| CPU | 多核心/多處理器 | MySQL 多線程架構可並行處理查詢,受益於多核 |
innodb_flush_log_at_trx_commit=1 與 sync_binlog=1 保證數據安全,配合電池備寫緩存(BBWC)緩解寫入延遲。ANALYZE TABLE 更新統計信息,配合 OPTIMIZE TABLE 整理碎片。