数据库服务器属i/o密集型负载,优化需围绕减少换页、加速落盘、避免缓冲区竞争:调低vm.swappiness至0或1,设vm.dirty_ratio=15、vm.dirty_background_ratio=5,ssd用none或mq-deadline调度器,挂载加noatime等选项,并增大文件描述符与网络缓冲。

数据库服务器属于典型的 I/O 密集型负载,内存和磁盘子系统直接影响查询延迟、吞吐量与主从同步稳定性。优化不能只看单个参数,而要围绕“减少不必要换页、加速数据落盘、避免缓冲区竞争”三个核心目标展开。
重点压低 swap 倾向,防止内存抖动
数据库进程(如 MySQL、PostgreSQL)通常会主动管理自己的缓存(InnoDB Buffer Pool、Shared Buffers),不需要内核频繁介入换页。默认 vm.swappiness=60 会让内核在内存使用刚过 60% 就开始往 swap 写数据,这会严重拖慢响应。
- 生产环境建议设为 1 或 0:临时生效用
sysctl vm.swappiness=1;永久写入/etc/sysctl.conf - 设为 0 并不等于完全禁用 swap(OOM 时仍可保底),而是极大降低换页概率;设为 1 是更稳妥的折中
- 配合
vm.vfs_cache_pressure=50可进一步减少对 dentry/inode 缓存的回收压力,让文件元数据更稳定驻留
调优页面缓存行为,匹配数据库写模式
数据库大量写 redo log、binlog、数据页,这些操作依赖内核 page cache 的刷盘策略。默认设置容易造成写放大或延迟突增。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- vm.dirty_ratio = 15:当脏页占总内存 15% 时,内核强制同步刷盘,避免积压过多导致阻塞写入
- vm.dirty_background_ratio = 5:脏页达 5% 时,后台线程悄悄开始写入,平滑释放压力
- 若使用 SSD 且业务写入持续稳定,可适当提高 background_ratio 到 10,减少突发 flush
调整 I/O 调度器与挂载选项,减少路径开销
传统 CFQ 调度器面向通用桌面,在高并发随机读写场景下会引入额外延迟;ext4 默认挂载选项也会带来不必要的元数据更新开销。
- SSD 场景统一改用 none(即 kyber)或 mq-deadline:执行
echo none > /sys/block/nvme0n1/queue/scheduler(NVMe)或echo mq-deadline > /sys/block/sda/queue/scheduler(SATA/SAS) - 数据库数据盘挂载加 noatime,nobarrier,errors=remount-ro;若使用 XFS,推荐 noatime,logbufs=8,logbsize=256k
- 慎用
data=writeback(ext4):虽提升写入性能,但崩溃后可能丢失未提交事务,仅限有 UPS+双机热备环境
限制文件描述符与 socket 缓冲,防资源耗尽
数据库连接数多、主从同步流量大,容易触发内核级资源瓶颈,尤其在高并发短连接或大包同步场景。
- 增大网络缓冲:确保
net.core.rmem_max和net.core.wmem_max≥ 16MB,同时必须同步调大net.ipv4.tcp_rmem三元组最大值(否则无效) - 主从同步走内网时,建议启用
net.ipv4.tcp_congestion_control = bbr,比默认 cubic 更稳,丢包容忍更强 - 数据库进程 ulimit -n 至少设为 65535,并在 systemd service 文件中配
LimitNOFILE=65535,避免 open files 报错










