優化層級優先序
- 硬體
- 作業系統/函式庫
- SQL 伺服器 (設定與查詢)
- API
- 應用程式
硬體優化
- 大表 (>2GB) 必須用 64 位元架構 (Alpha、Sparc、IA64),MySQL 內部大量使用 64 位元整數。
- 大資料庫優化順序:**RAM → 快速磁碟 → CPU 能力**。
- 更多記憶體 → 熱鍵頁面留在記憶體 → 加速鍵值更新。
- 非交易安全表或大表避免長檢查 → **UPS 保護電源故障安全關機**。
- 專用資料庫伺服器 → 考慮 **1GbE 乙太網路**,延遲與吞吐同等重要。
磁碟優化
- 系統、程式、暫存檔 **獨立磁碟**;大量寫入場景將 **更新日誌/交易日誌放專用磁碟**。
- **低尋找時間** 對資料庫磁碟關鍵。B-Tree 查找成本估算:
log(行數) / log(索引區塊長度/3*2/(鍵長+指標長)) + 1 次尋找。
- 50 萬列表,Mediumint 索引約需 4 次尋找,索引大小 ~5.2MB,實際多半緩存只需 1-2 次。
- 寫入需 4 次尋找定位新鍵位置 + 2 次更新索引寫入列。
- 極大資料庫受限於磁碟尋找速度,隨資料量呈
N log N 遞增。
- **資料庫/表分散不同磁碟**:MySQL 支援符號連結實現。
- **RAID 0 (條帶)** 提升讀寫吞吐;**RAID 0+1 (鏡像條帶)** 提升讀取與安全,寫入略降。
- 臨時檔/可重建資料 **勿用鏡像/RAID** (除 RAID 0)。
- Linux 啟動參數:
hdparm -m16 -d1 啟用多扇區讀寫 + DMA,效能增 5-50%。
- 掛載選項:
async,noatime (預設 async)。
- 特定熱點表可用 **記憶體磁碟** (tmpfs/ramfs),通常不必要。
作業系統優化
- **禁止 Swap**:記憶體不足應加記憶體或降低用量,Swap 會殺死資料庫效能。
- **禁用 NFS**:NFS 鎖定問題導致資料庫不穩定。
- 提高 **開啟檔案數限制** (ulimit -n) 與 **進程/執行緒數限制** (在
safe_mysqld 腳本設定)。
- 少量大表 → 告訴檔案系統勿碎片化 (Solaris)。
- 使用 **支援大檔案的檔案系統** (Solaris)。
- **檔案系統選擇**:Linux 上 ReiserFS 開啟/讀寫極快,檢查僅需秒級 (歷史背景:ext3/4 成熟前)。現代建議 XFS/ext4/Btrfs。
來源:Monty (MySQL 創始人) 在 O'Reilly Open Source Convention 2000 大會演講內容整理。部分硬體/檔案系統建議因年代久遠需結合現代技術 (NVMe、ZFS、XFS、ext4、大記憶體、NVRAM) 重新評估。