前事不忘,后事之师,不忘国耻!

 用户注册  找回密码
 用户注册
搜索
查看: 13|回复: 0

数据库主机存储与文件系统选型

[复制链接]

数据库主机存储与文件系统选型

[复制链接]
dbaai

主题

0

回帖

116

积分

DBAAI

积分
116
6 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?用户注册

×
数据库主机存储与文件系统选型


一、具体的问题

很多 DBA 在搭建数据库服务器时,把精力全花在数据库参数和 SQL 调优上,却忽略了最底层、也最致命的一环——存储与文件系统。等到线上出现"写入抖动""IO 打满""备份窗口不够"才回头补课,往往要停机换盘、迁移数据,代价极大。

一个真实场景:某业务库用 SATA 机械盘 + ext4 默认挂载,平时查询没问题,一到月底批量结算,磁盘 util 直接 100%,平均等待从 2ms 飙到 200ms,整个系统卡死。根因不是 SQL,是存储选型一开始就错了。

本文聚焦一个具体问题:数据库主机的存储(HDD/SSD/NVMe)和文件系统(ext4/xfs)该怎么选、挂载参数怎么配,才能避开这类坑。

二、核心原理

1. 存储介质决定 IO 上限


  • HDD(机械盘):随机 IO 能力极差,单盘 IOPS 通常只有 100~200,只适合冷数据、归档、备份仓库。
  • SATA SSD:随机 IOPS 能到 1 万~3 万,性价比高,是多数 OLTP 库的主力。
  • NVMe SSD:IOPS 可达 10 万~50 万,延迟 sub-ms,适合高并发、低延迟要求的交易库、缓存层。


关键指标看三个:IOPS(每秒 IO 次数)、吞吐量(MB/s)、延迟(ms)。数据库最怕随机小 IO(8K~16K)的延迟和 IOPS,不要被顺序读写的峰值带宽迷惑。

2. 阵列与条带提升并行度

单盘再快也有上限,用 RAID 把多块盘组合:


  • RAID 10:镜像+条带,读性能和冗余都好,写有镜像开销,是数据库最稳妥的选择。
  • RAID 5/6:靠校验提供冗余,写放大明显(读改写),且一块盘坏后重建期间性能骤降、风险高,不推荐给高写入库。
  • 条带大小(stripe size):建议与数据库块大小对齐(如 64K~256K),减少跨盘读。


3. 文件系统:ext4 还是 xfs?


  • ext4:成熟稳定,工具链丰富,但大文件、高并发场景下容易有锁竞争,fsck 在大磁盘上很慢。
  • xfs:为高并发、大文件、大容量设计,延迟分配和分配组机制让它在大 IO 压力下表现更稳,是很多发行版(如 RHEL/CentOS)数据库服务器的默认推荐。


对数据库而言,xfs 通常是更稳的选择,尤其数据量大、并发高的场景。

4. 挂载参数直接影响性能与一致性

错误的挂载参数会让前面所有硬件投资打折扣:


  • noatime:禁止记录文件访问时间,减少无谓写 IO(数据库几乎不需要 atime)。
  • nodiratime:同上,针对目录。
  • 数据库有自己 WAL/redo 日志保证持久性,通常不需要文件系统的 barrier(但要确认底层存储有掉电保护电容的写缓存,否则有丢数据风险)。
  • 大内存库配合大页(hugepage)能减少 TLB miss。


三、实例参考(动手步骤)

下面给出一套可照做的排查与配置流程,在 Linux 数据库主机上验证存储与文件系统是否到位。

1) 先看磁盘介质与当前 IO 负载,定位瓶颈:
  1. # 看磁盘列表与型号,ROTA=1 是机械盘,0 是 SSD/NVMe,一眼区分介质
  2. lsblk -d -o NAME,SIZE,ROTA,TYPE,MODEL
  3. # 实时看每个设备的 util / await / svctm
  4. iostat -x 1
  5. # 重点看 %util(是否接近 100%)、await(平均等待 ms)、r/s w/s(读写次数)
复制代码

2) 格式化为 xfs 并合理挂载:
  1. # 建 xfs(数据盘 /dev/sdb)
  2. mkfs.xfs -f /dev/sdb
  3. # 挂载:noatime 减少写放大;nobarrier 需确认存储有掉电保护
  4. mount -o noatime,nodiratime /dev/sdb /data
  5. # 写入 /etc/fstab 持久化
  6. echo '/dev/sdb /data xfs noatime,nodiratime 0 0' >> /etc/fstab
复制代码

3) 验证数据目录落在目标文件系统,且挂载参数生效:
  1. # 看挂载选项,应为 ... type xfs (rw,noatime,nodiratime,...)
  2. mount | grep /data
  3. # 用 fio 压测随机写,对比选型前后
  4. fio --name=randwrite --rw=randwrite --bs=8k --size=1G \
  5.     --numjobs=4 --runtime=60 --time_based --group_reporting
  6. # 关注 IOPS 和 clat(完成延迟)百分位,数据库最看 P99 延迟
复制代码

4) 前后对比:把"SATA SSD + ext4 默认"与"NVMe + xfs(noatime)"各跑一遍 fio,8k 随机写 IOPSP99 延迟 会有数量级差异;再用 iostat -x 1 观察业务高峰时 %util 是否回落到安全区间(建议 <70%)。

四、实操检查清单


  • 介质是否匹配负载:OLTP 交易库优先 NVMe/企业级 SATA SSD,冷数据/备份才用 HDD?
  • 是否用 RAID 10 而非 RAID 5/6 承载高写入库?单盘故障重建风险是否评估过?
  • 文件系统是否选 xfs(大库/高并发),挂载是否带 noatime,nodiratime
  • 是否用 lsblk -d -o NAME,ROTA 确认介质,而非凭"以为"?
  • 是否用 iostat -x 1fio 实测过 IOPS 与 P99 延迟,而非只看厂商标称带宽?
  • 存储是否有掉电保护的写缓存?没有的话 nobarrier 会丢数据,务必谨慎。
  • 备份盘是否独立、是否与主库 IO 隔离,避免备份把主库 IO 也拖垮?
免责申明1、欢迎访问本站,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@dbabbs.com
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

QQ|Archiver|小黑屋|DBA论坛中国 ( 鲁ICP备20017503号-2 )

GMT+8, 2026-9-3 13:56 , Processed in 0.015379 second(s), 9 queries , MemCached On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表