数据库服务器运维需系统级收敛,聚焦低延迟、高吞吐与确定性响应:I/O路径须隔离日志与数据、调度器设为deadline或none、挂载启用noatime/nodiratime;内存禁用THP、swappiness=1、overcommit=1;CPU绑定核并设SCHED_FIFO实时调度;网络调大连接队列与缓冲区。

数据库服务器对底层系统的要求远高于普通应用,调优不是堆参数,而是围绕“低延迟、高吞吐、确定性响应”做系统级收敛。重点不在通用优化,而在消除干扰、保障资源独占、缩短I/O路径。
磁盘I/O路径必须收束
数据库最怕随机写抖动和日志争抢。不能让数据文件、事务日志、临时表空间混在同一块盘或同一逻辑卷上。
- 日志(redo log / binlog)必须独占物理盘或专用stripe volume,禁用journal(ext4用data=writeback,XFS禁用barrier)
- 数据目录与备份目录分离,避免备份扫描拖垮在线查询
- I/O调度器统一设为deadline(HDD/混合负载)或none(NVMe SSD),禁用CFQ或mq-deadline的动态预测逻辑
- 挂载选项加noatime,nodiratime,commit=60(避免每秒刷日志),SSD额外加discard(TRIM)
内存分配要刚性可控
数据库进程需要稳定、可预期的物理内存,不能被内核缓存或匿名页回收机制干扰。
- 关闭透明大页:
echo never > /sys/kernel/mm/transparent_hugepage/enabled(InnoDB对THP敏感,易引发延迟毛刺) - 降低swap倾向:
vm.swappiness = 1(不是0,留底线防OOM;设为0可能触发内核直接kill) - 允许内存过量分配:
vm.overcommit_memory = 1(配合MySQL的innodb_buffer_pool_size等预分配行为) - 限制文件缓存干扰:
vm.vfs_cache_pressure = 50(减缓dentry/inode回收,避免路径查找抖动)
CPU与中断必须隔离保底
数据库线程不能被无关中断、调度迁移或节能策略打断。
- 绑定关键进程到固定CPU核:
taskset -c 0-3 mysqld,并关闭对应核的irqbalance(IRQBALANCE_BANNED_CPUS="0x0f") - 设为performance governor:
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor - 对MySQL等关键进程启用SCHED_FIFO实时调度:
chrt -f 80 $(pidof mysqld)(需root+CAP_SYS_NICE) - 增大调度粒度:
kernel.sched_latency_ns = 10000000(10ms),减少小任务频繁抢占
网络与连接需稳态承载
即使数据库走本地socket,也要防范TCP栈异常影响监控、备份、主从同步等辅助链路。
- 增大连接队列:
net.core.somaxconn = 65535,net.ipv4.tcp_max_syn_backlog = 65535 - 复用TIME_WAIT连接:
net.ipv4.tcp_tw_reuse = 1(主从复制、逻辑备份大量短连接场景必需) - 缓冲区按需设上限:
net.core.rmem_max = 25165824(24MB),net.ipv4.tcp_rmem = "4096 131072 25165824" - 禁用netfilter conntrack(若不用iptables做NAT),避免连接跟踪表锁竞争











