驚人發現:許多 DBA 無法給出合理答案,大量伺服器仍跑在預設配置。雖可調參數眾多,但典型負載下僅少數關鍵,設對這些,其他微調效果有限。
僅對 MyISAM 生效。純 MyISAM 環境可設為可用記憶體 30-40%。需留記憶體給 OS 快取資料(資料量常大於索引)。避免浪費:.MYI 只有 1GB 卻設 4GB 缓存。極少用 MyISAM 時保留 16-32MB 供臨時表索引。
InnoDB 對緩衝極敏感。MyISAM 在預設 key_buffer_size 尚可運行,InnoDB 預設池大小卻如蝸牛。InnoDB 同時快取資料與索引,無需留太多給 OS。純 InnoDB 可設 70-80% 可用記憶體。資料量小且不暴增時無需過大。
對效能影響較小(足夠記憶體的 OS 上)。可設 20MB+,視 InnoDB 內部分配需求而定。
值越大效能越好,但會增加恢復時間。常設 64-512MB,視伺服器規模。
預設值應付中等寫入與短事務尚可。寫入尖峰或高負載需增大。設太大浪費記憶體(每秒刷新一次),無需超過 1 秒所需空間。通常 8-16MB 足夠。
預設 1:每次提交刷盤,極耗資源(無電池備援快取時)。多數應用(特別從 MyISAM 遷移)設 2 即可:僅刷至 OS 快取,每秒刷盤,極少丟失 1-2 秒更新。設 0 最快但最不安全(崩潰丟失事務)。
開表開銷大(MyISAM 標記 .MYI 正在使用)。加大快取數量,盡量緩存打開的表。200+ 表建議 1024,連接數大再增大。見過 100,000 設定。
至少設 16。大量突發併發連接且 Threads_Created 大時再增大。目標:正常操作無需創建新執行緒。
勿設過大(維護開銷大導致變慢)。通常 32-512MB。觀察命中率,低則停用。
全域變量依硬體與引擎設定;會話變量依負載設定(如簡單查詢無需加大 sort_buffer_size 即使有 64GB 記憶體,反而可能降低效能)。官方發布包含多種 my.cnf 範本,作為配置模板遠優於預設值。