為發揮 MySQL 在 Linux 上的最大性能,需從作業系統層面進行多維度調優。本文涵蓋 I/O 調度演算法、文件描述符限制、NUMA 架構、Swappiness 參數與文件系統掛載選項五大核心優化項目。
預設 CFQ 演算法適合桌面環境,資料庫建議改為 deadline(機械硬碟)或 noop(SSD/PCIe-SSD)。
echo "deadline" > /sys/block/sda/queue/scheduler
注意:sda 請替換為實際資料盤裝置名。
編輯 /etc/grub.conf,在 kernel 參數行加入 elevator=deadline,重啟後生效。驗證:cat /sys/block/sda/queue/scheduler。
高併發場景下預設 1024 遠遠不足,建議調整至 51200 或更高。
ulimit -n 51200
編輯 /etc/security/limits.conf:
* hard nofile 51200
* hard nproc 51200
並確保 /etc/pam.d/login 包含 session required /lib64/security/pam_limits.so。重啟後用 ulimit -a 驗證。
NUMA 架構下 MySQL 易發生記憶體分配不均導致 Swap,建議關閉。
在 /etc/grub.conf kernel 行加入 numa=off,重啟生效。
新版 mysqld_safe 內建支援,啟用 --numa-interleave 參數即可,無需額外修改。
控制核心積極交換記憶體頁面到 Swap 的傾向(0-100,預設 60)。
永久生效:編輯 /etc/sysctl.conf 加入 vm.swappiness = 1,執行 sysctl -p 立即生效。
文件系統選擇:XFS ≈ ext4 > ext3。掛載選項建議:
defaults,noatime,nodiratime,barrier=0 (XFS 用 nobarrier)
編輯 /etc/fstab 修改對應分區掛載參數,重啟生效。noatime/nodiratime 關閉存取時間更新;barrier=0 關閉寫入屏障(需 BBU 電池備份保證電源安全)。驗證:cat /proc/mounts。