MySQL 效能深受作業系統層面影響。本文針對三大關鍵點提供永久生效的調校方案:將 I/O 調度器從 cfq 改為 deadline/noop、擴大檔案描述符與進程數限制、關閉 NUMA 避免記憶體分配不均導致 Swap,含 grub 參數、limits.conf、mysqld_safe 腳本驗證完整步驟。

現狀:預設 cfq (完全公平佇列) 適合桌面,不適合資料庫隨機 I/O。
echo deadline > /sys/block/sda/queue/scheduler
# SSD/NVMe 建議 noop
echo noop > /sys/block/nvme0n1/queue/scheduler
vi /etc/grub.conf
# kernel 行尾加入 elevator=deadline
kernel /vmlinuz-... ro root=UUID=... rd_NO_LUKS ... elevator=deadline numa=off rhgb quiet
# 重啟後驗證
cat /sys/block/sda/queue/scheduler
# [cfq] deadline noop → deadline 被選中
ulimit -n 51200
ulimit -u 51200
vi /etc/security/limits.conf
* hard nofile 51200
* soft nofile 51200
* hard nproc 51200
* soft nproc 51200
vi /etc/pam.d/login
session required /lib64/security/pam_limits.so
# 重啟驗證
ulimit -a
原因:NUMA 導致記憶體局部性分配,MySQL 單進程跨節點存取觸發 Swap,效能劇降。
vi /etc/grub.conf
kernel ... numa=off ...
# 檢查 mysqld_safe 是否已包含 numactl --interleave=all
grep -A 10 'numa_interleave' /usr/bin/mysqld_safe
# 若無,手動修改啟動腳本在執行 mysqld 前加入:
cmd="numactl --interleave=all $cmd"
numactl --hardware 觀察節點記憶體分布iostat -x 1 觀察 %util、await、svctmmysqladmin ext -i 1 | grep -E 'Threads_connected|Questions|Slow_queries|Innodb_buffer_pool_reads'