1. 查詢優化:投入產出比最高
- 開啟
slow_query_log 並設 log_queries_not_using_indexes=ON。
- 用
pt-query-digest 分析 Top 消耗查詢。
EXPLAIN 檢查執行計劃,補缺失索引,調整 JOIN 順序、排序方式。
- 只優化真實流量覆蓋的高頻 SQL,忽略冷頁面。
2. Master-Master (Active-Passive) 復制:橫向擴展讀能力
- 雙主互為主從,一寫一備,提供高可用。
- 應用層路由:80% SELECT 導向從庫,20% 寫入走主庫。
- 可級聯掛載多個只讀從庫,線性擴展讀吞吐。
3. 記憶體緩存參數調優:基礎且關鍵
innodb_buffer_pool_size # 70-80% 物理內存,核心數據熱點
key_buffer_size # MyISAM 索引緩存
query_cache_size # 大 SMP 慎用,鎖爭用嚴重
thread_cache_size / table_open_cache
innodb_log_file_size / innodb_log_buffer_size
sort_buffer_size, join_buffer_size, read_buffer_size, read_rnd_buffer_size
tmp_table_size / max_heap_table_size # 臨時表內存上限,防磁盤臨時表
4. 磁盤子系統:RAID 10 而非 RAID 5
- RAID 5 寫入懲罰極大(讀-改-寫),重建極慢且高風險。
- RAID 10 鏡像+條帶,利用所有盤帶寬,單盤故障秒級重建。
- 即使數據全在內存,排序、臨時表、Redo Log 仍需磁盤 IO。
5. 關鍵參數微調
innodb_flush_log_at_trx_commit = 2 # 寫入 OS 緩存即返回,極大提升寫入吞吐,風險:OS crash 丟 1s 數據
innodb_file_per_table = ON # 獨立表空間,便於回收空間、單表備份、避免共享表空間膨脹