同样的硬件、同样的数据库版本,为什么你的 MySQL 只能跑 5000 TPS,别人能跑 2 万?差异不在数据库本身,在操作系统的资源配置。
数据库是操作系统资源消耗最大的应用。CPU 调度、内存分配、IO 路径、文件系统——每一层的配置偏差,都会在数据库上放大为性能差距。
innodb_flush_method = O_DIRECT_NO_FSYNC # MySQL 8.0+ 推荐
O_DIRECT 把 IO 控制权从内核交给 InnoDB,前提是 Buffer Pool 足够大(建议 60-70% 总内存)。
PG 的 shared_buffers + 内核 cache 是双缓冲。PG 14+ 开始尝试 direct IO。
wal_sync_method = open_sync # 推荐
InnoDB buffer pool: 20GB (62%)OS + Page Cache: 8GB (25%)MySQL 其他/连接: 4GB (13%)shared_buffers: 8GB (25%)OS Page Cache: 18GB (56%)PG 其他/连接: 6GB (19%)# MySQLinnodb_use_native_aio = ONlarge_pages = ON# PostgreSQL (13+)huge_pages = onecho 2048 > /proc/sys/vm/nr_hugepages # 2MB x 2048 = 4GB
MySQL 和 PG 都推荐 XFS。
mkfs.xfs -d agcount=8 -l size=128m /dev/sdb1
mount -o noatime,nodiratime,nobarrier /dev/sdb1 /data/mysql
NOBARRIER 安全说明:NVMe SSD 有电容保护(掉电时自动刷写缓冲区),可安全关闭 barrier。SATA SSD 和 HDD 必须开启。
NVMe SSD -> none(默认即最优)SATA SSD -> mq-deadlineHDD -> mq-deadlinecat /sys/block/sdb/queue/schedulerecho mq-deadline > /sys/block/sdb/queue/scheduler# NVMe 队列深度(写密集场景)echo 512 > /sys/block/sdb/queue/nr_requests
# 内存参数vm.swappiness = 1vm.dirty_ratio = 15vm.dirty_background_ratio = 5vm.vfs_cache_pressure = 200vm.overcommit_memory = 2vm.overcommit_ratio = 80vm.nr_hugepages = 2048# 网络参数net.core.somaxconn = 65535net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.tcp_rmem = 4096 131072 16777216net.ipv4.tcp_wmem = 4096 131072 16777216net.ipv4.tcp_tw_reuse = 1net.ipv4.ip_local_port_range = 1024 65535# 文件系统fs.file-max = 2000000fs.aio-max-nr = 1048576
# 数据库强制使用 numactl 启动numactl --interleave=all mysqld_safe# 关闭 NUMA balancing(CPU 不漂移)echo 0 > /proc/sys/kernel/numa_balancing# CPU 隔离:系统进程在 CPU 0-1,数据库独占 CPU 2-15# grub: isolcpus=2-15 nohz_full=2-15 rcu_nocbs=2-15taskset -c 2-15 mysqld_safe
SHOW GLOBAL STATUS LIKE 'Innodb_data_fsyncs';SHOW GLOBAL STATUS LIKE 'Innodb_log_waits';SHOW GLOBAL STATUS LIKE 'Innodb_data_pending_fsyncs';SELECT * FROM pg_stat_bgwriter; # checkpoints 频率SELECT * FROM pg_stat_database; # disk read cache missiostat -x 1 # await < 2mspidstat -r 1 # RSS 稳定free -h # available > 20%
数据库的 Linux 调优 = IO 对齐(O_DIRECT) + 内存对齐(Buffer Pool/大页) + CPU 对齐(NUMA/绑核) + 文件系统对齐(XFS/noatime)。四个对齐做好,同样的硬件跑出 2 倍的 TPS。
这是 20 篇 Linux 高阶知识系列的最后一篇,感谢你的阅读。
END