101 個 MySQL 調優技巧 (第 1 部分):硬體、OS、檔案系統、部署架構
原文列出 101 條技巧,首批 24 條聚焦基礎設施層。本文重新整理為可執行的清單,補充現代硬體 (NVMe、Optane、ARM) 與雲原生 (K8s、Operator) 語境下的調整建議。
硬體選型
- 記憶體:InnoDB Buffer Pool ≥ 資料熱集大小 (建議佔物理記憶體 70-80%)。大記憶體 (256GB+) 選擇 LRDIMM/3DS RDIMM。
- 避免 Swap:
vm.swappiness=1 (不為 0 避免 OOM Killer 殺掉 mysqld),生產環境建議關閉 Swap 或用 zram。
- CPU:高主頻 (3.0+ GHz) 優於多核心,MySQL 單查詢單執行緒。ARM Neoverse N1/N2 能效比優秀,適合雲端實例。
- 儲存:NVMe SSD (U.2/E1.S) > SATA SSD > SAS HDD。RAID 10 (條帶+鏡像) 兼顧效能與冗餘,避免 RAID 5/6 (寫入懲罰)。
- 獨立裝置:OS、Redo Log (ib_logfile)、Binlog、Data、Tmpdir 各自獨立 NVMe 命名空間/分區,消除 I/O 干擾。
- RAID 控制器:帶電池/快閃備援緩存 (BBWC/FBWC) 的硬體 RAID 卡,開啟 Write-Back。
- 網路:10/25 GbE 低延遲網卡,啟用 RSS/RFS、關閉 TSO/LRO (MySQL 小封包敏感)。
作業系統調優 (Linux)
vm.swappiness=1、vm.dirty_ratio=10、vm.dirty_background_ratio=5、vm.dirty_expire_centisecs=1000。
- 檔案系統:**XFS** (大檔案、高併發、延遲分配) > ext4。掛載選項:
noatime,nodiratime,inode64,logbufs=8,logbsize=256k。
- I/O 排程器:**none** (NVMe) / **mq-deadline** (SSD) / **bfq** (HDD)。
echo none > /sys/block/nvme0n1/queue/scheduler。
- 關閉透明大頁:
echo never > /sys/kernel/mm/transparent_hugepage/enabled (避免延遲尖峰)。
- CPU 頻率調節:
performance 模式 (cpupower frequency-set -g performance)。
- 網路核心參數:
net.core.somaxconn=65535, net.ipv4.tcp_max_syn_backlog=65535, net.ipv4.tcp_tw_reuse=1。
- 使用 64 位元 OS + 64 位元 MySQL,支援 > 4GB Buffer Pool。
- 最小化安裝:移除圖形介面、無用套件、關閉未用服務 (postfix, chrony 等改用 systemd-timesyncd)。
/etc/hosts 註冊應用/資料庫主機名,避免 DNS 查詢延遲。
部署架構
- 專用實例:MySQL 獨佔物理機/VM/容器,不與應用、Redis、Kafka 混部。
- 高可用:MGR (MySQL Group Replication) / InnoDB Cluster / Orchestrator + ProxySQL,實現自動故障轉移。
- 讀寫分離:ProxySQL / MaxScale 路由讀流量至 Replica,寫流量至 Primary。
- 備份策略:XtraBackup 物理熱備 (每日全量 + 每小時增量) + mysqldump 邏輯備份 (週全量) + Binlog 點對點恢復演練。
- 監控告警:Prometheus + mysqld_exporter + Grafana,核心指標:QPS、Latency P99、Buffer Pool Hit Rate、InnoDB Row Lock Waits、Replication Lag、Disk Space%。
- 變更管理:所有 DDL 走
pt-online-schema-change / gh-ost,經 Staging 驗證後生產執行,納入 GitOps 流程。
結語:基礎設施層調優是效能的地基。按清單逐項落地、建立基準線 (sysbench/TPC-C)、持續監控偏移,才能為上層 SQL/索引/架構調優提供穩定跑道。下一部分將深入 MySQL 參數配置、InnoDB 內部機制、SQL 改寫與查詢優化。