優化核心觀念
優化需對整個系統深度理解。局部優化可基於少量知識,但極致效能要求全系統掌握。本章說明 MySQL 優化各層面方法與範例。
四大常見瓶頸
- 磁碟尋道:現代磁碟平均尋道 <10ms,理論每秒 1000 次。改善緩慢,優化策略:將資料分散於多磁碟。
- 磁碟讀寫:傳輸率 10-20MB/s。較易優化,可多磁碟並行讀取。
- CPU 週期:資料讀入記憶體後的處理運算。小表常見限制,但小表速度通常非問題。
- 記憶體頻寬:CPU 需求超過快取時成為瓶頸,較罕見但需知悉。
系統/編譯/啟動參數調校
作業系統選擇
- 多 CPU 環境:Solaris(執行緒表現佳)或 Linux 2.2+ 核心(良好 SMP 支援)。
- 32 位元機器 Linux 預設 2GB 檔案大小限制,期待 XFS 等新檔案系統解決。
- 建議:生產環境前務必測試目標平台。
其他系統建議
- 記憶體充足時移除所有交換裝置(部分 OS 仍會使用 swap)。
- 單機運行 MySQL 時用
--skip-locking 避免外部鎖定(不影響功能)。執行 myisamchk 前須停止服務或鎖定相關表。MIT-pthreads 編譯時預設開啟。多 MySQL 實例共享資料目錄時不可使用。
編譯與連結對速度的影響
static 靜態連結產生最快執行檔。
- Unix Socket 連線優於 TCP/IP。
- Linux 上
pgcc -O6 編譯最快,編譯 sql_yacc.cc 需 ~200MB 記憶體。配置時設 CXX=gcc 避免多餘 libstdc++。
- 優質編譯器/選項可帶來 10-30% 效能提升,自行編譯 SQL Server 尤其重要。
- Intel 平台建議
pgcc 或 Cygnus CodeFusion;Fujitsu 編譯器尚未穩定支援 MySQL 優化。