首页/系统与基础设施/存储速查/透写与回写策略的选择依据
存储运维与性能60 条

透写与回写策略的选择依据

透写要求数据落盘后才应答,回写先进缓存就应答。选择依据不是「快还是慢」,而是断电保护是否可靠、上层是否已有持久化副本、以及负载是小随机写还是顺序写。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​‌‌‌​‌‌‌​​‌​​‌‌​‌​​‌​‌‌‌​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​‌​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌‌​‌​‌​‌‌​​‌‌‌​‌‌​‌​​​​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌‌​​‌‌​‌‌‌​‌​‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​‌‌‌​‌‌‌​​‌​​‌‌​‌​​‌​‌‌‌​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​​‌​​‌‌​​​​‌​‌‌​​​‌‌​‌‌​‌​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

两种写策略的性质

回写(Write Back)把写数据先放入缓存并立即向主机确认,缓存再按内部调度落盘,因此能合并小随机写、把多次物理写压成一次,延迟明显更低。透写(Write Through)要求数据真正写到持久介质后才确认,延迟等于介质写延迟,但没有掉电丢数据窗口。两者的差别集中在一件事上:主机收到「写成功」的瞬间,数据到底安不安全。

基本信息

生效层次可分别存在于操作系统、控制器、盘内缓存三层,任一层是回写就有风险窗口
回写前提有 BBU / 超级电容 / 非易失缓存,且保护部件健康在监控中
透写代价写延迟上升、小随机写 IOPS 明显下降,顺序写影响相对小
上层副本数据库 WAL、同步复制、分布式多副本都可部分替代缓存保护的职责
性能测试口径报告延迟与 IOPS 时必须注明缓存策略,否则数据不可比
变更影响切策略影响全部业务 IO,须走变更窗口并留回滚步骤

典型使用场景

  • 新阵列上线做策略定型:有保护就开回写,无保护就透写,先把结论定死再谈调优
  • 电池或电容报错后的临时降级处置,评估切透写对业务的影响量级
  • 数据库服务器上判断存储缓存与数据库自身 fsync 机制是否重复,避免双份持久化开销叠加
  • 性能对比测试中统一口径,确保两次测试的缓存策略一致
  • 跨机房复制链路带宽受限时,评估本端缓存能否吸收写突发避免链路拥塞

确认与切换策略的观察点

确认与切换策略的观察点
# 块设备层当前报告的缓存模式
cat /sys/block/sda/queue/write_cache
# 用 direct IO 绕开操作系统页缓存,单独观察存储侧表现
dd if=/dev/zero of=/data/t.bin bs=4k count=10000 oflag=direct
# 观察缓存下刷压力:脏页比例攀升说明回写缓冲被写满
cat /proc/meminfo | grep -i dirty
grep -E 'dirty_ratio|dirty_expire' /etc/sysctl.conf
# 阵列侧策略以厂商 CLI 或管理界面为准,改前记录原值以便回滚
storcli /c0/v0 show all | grep -Ei 'write|cache'

选择依据速查

判定维度倾向回写倾向透写
断电保护BBU / 电容健康且在监控内无保护或保护部件失效
写负载特征小随机写密集、突发写多顺序写为主、写量小
上层副本已有数据库 WAL 或多副本可兜底数据唯一副本、无其他保护
风险偏好可接受极小概率的一致性修复成本要求零掉电数据不丢
回写默认不是错误配置,无保护地开回写才是。很多阵列在保护部件失效时会自动切透写,业务侧表现为写延迟突然上升,此时先查保护部件状态,而不是急着去调应用。
数据唯一副本、且上电后无法承受任何重建或修复动作的场景,透写是更保守的选择:性能损失是可预估的,掉电丢数据的后果不可预估。

易错点

  • 以为改了阵列策略就改了全部层次:操作系统页缓存、盘内缓存仍可能处于回写,要逐层确认
  • 拿不同缓存策略的压测数据做容量规划,规划结果会偏乐观一个数量级
  • 数据库已开启 fsync 或带 WAL,存储又强制透写,导致同一份数据被持久化两道,延迟叠加
  • 电池报错后长期跑在降级状态不处理,既没有保护也损失了性能,等于两头都输
  • 切换策略后不做前后对比验证,无法区分性能变化来自策略还是来自负载漂移

数据来源与参考

  • INCITS T10 SBC-4《SCSI Block Commands》写缓存使能(WCE)位说明
  • NetApp 官方文档《write-back 与 write-through 策略》
  • VMware 官方文档《存储写缓存策略配置》

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/storage/write-through-versus-write-back.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​‌‌‌​‌‌‌​​‌​​‌‌​‌​​‌​‌‌‌​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​‌​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌‌​‌​‌​‌‌​​‌‌‌​‌‌​‌​​​​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌‌​​‌‌​‌‌‌​‌​‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​‌‌‌​‌‌‌​​‌​​‌‌​‌​​‌​‌‌‌​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​​‌​​‌‌​​​​‌​‌‌​​​‌‌​‌‌​‌​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​