惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
The Cloudflare Blog
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
Last Week in AI
Last Week in AI
Jina AI
Jina AI
V
V2EX
罗磊的独立博客
V
Visual Studio Blog
A
About on SuperTechFans
IT之家
IT之家
P
Proofpoint News Feed
B
Blog
博客园 - Franky
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
Y
Y Combinator Blog

博客园 - likingzi

RAID10和RAID5性能对比测试 迁移MySQL数据到Oracle实践记录 瀚高数据库不同版本对实例级用户的支持情况 使用benchmarksql测试数据库处理能力 BigCloud Enterprise Linux 8和Rocky Linux 8升级OpenSSH步骤 【翻译】凝视深渊:千核并发控制的评估 NFS使用TrueNAS SCALE的好处 linux 手动释放内存 linux8安装oracle 11g遇到的问题记录 ARM架构鲲鹏主机BClinux离线安装docker步骤 ORA-01658创建表或索引报错分析 MySQL PXC 集群死锁分析案例 记录一下oracle 19c的集群节点移除、新增操作 MySQL PXC集群多个节点同时大量并发update同一行 MongoDB集群同步 【最佳实践】MySQL数据库迁移到PXC集群 MySQL PXC集群配置IPv6 【实操记录】MySQL主从配置 【实操记录】MySQL二进制安装包部署 MongoDB分片+副本集高可用集群的启停步骤
数据库IO性能优化思考
likingzi · 2026-06-24 · via 博客园 - likingzi

一、数据与WAL分离

务必将WAL日志(pg_wal目录)放在独立的物理磁盘或高性能分区,隔离数据文件写入压力,对提升性能至关重要

二、文件系统优化

文件系统选择:优先选择 XFS,尤其是在大文件和高并发的数据库场景下,实测4K随机写性能比 ext4 提升约 25%。
文件系统4K对齐:创建时使用 mkfs.xfs -f -s size=4096 /dev/sdX 确保 4KiB 对齐,这在很多虚拟化环境中效果显著。
挂载参数优化:如果数据库是 MySQL/PostgreSQL,且使用 XFS 文件系统,可在挂载选项增加参数提升日志子系统吞吐量:
mount -t xfs -o remount,noatime,nodiratime,logbufs=8,logbsize=256k,inode64,commit=60 /dev/sdX /mnt/db
noatime,nodiratime:关闭访问时间记录,减少大量微小写 IO(高并发必备)
commit=60:延长文件系统刷盘间隔(默认 5 秒,降低频繁 fsync)
async:异步写,数据先落页缓存,再后台刷盘,大幅降低即时 IO 压力
ext4:barrier=0:关闭 ext4 写屏障(硬件有 RAID 卡 + 电池 BBU 才建议开,断电无风险)
xfs:logbufs=8,logbsize=256k 放大日志缓冲区,减少元数据刷盘

三、“磁盘 IO 调度算法”优化

Linux 不同内核 / 磁盘推荐调度器:
SSD 固态硬盘:推荐 mq-deadline / none(新版本内核)
HDD 机械硬盘:推荐 mq-deadline(老内核 deadline)
严禁 SSD 使用 cfq(完全不适合,队列堆积严重)

1、临时修改

查看当前调度器:cat /sys/block/sda/queue/scheduler
SSD 设置 mq-deadline:echo mq-deadline > /sys/block/sda/queue/scheduler
老SSD/高速盘设置 none:echo none > /sys/block/sda/queue/scheduler

2、永久生效

编辑内核启动参数 /etc/default/grub,添加:elevator=mq-deadline
然后更新 grub,并重启服务器:grub2-mkconfig -o /boot/grub2/grub.cfg

四、“块设备队列参数”优化

针对 IO 队列堆积,util 高的情况,可对快设备队列参数进行优化。
并发高时默认队列深度太小,请求排队:

  1. 调大队列深度(SSD建议 1024~2048,HDD 256~512)
    echo 1024 > /sys/block/sda/queue/nr_requests
  2. 预读大小(顺序IO调大,随机IO调小)
    随机IO(数据库/小文件):16384
    顺序IO(备份/日志):65536
    echo 16384 > /sys/block/sda/queue/read_ahead_kb
    ---以上临时生效,需持久化可使用 udev 规则