数据中心应用

OLTP 的两条写路径:日志提交与数据页刷新的不同要求

作者:军航科工半导体OLTP / 预写日志 / WAL

OLTP 负载应拆成日志同步写、数据页异步刷新和索引随机读三条流分别看待。提交路径是 QD1 延迟问题而非 IOPS 问题,数据页刷新决定 DWPD 档位选择,而稳态下的 P99 才是评估用盘的正确指标。

先把负载拆成三条流

把 OLTP 当成一个统一的随机读写负载来评估,几乎一定会选错盘。实际上至少存在三条特征不同的流:预写日志是小块、顺序、同步的写,每次事务提交都要求数据真正进入掉电安全域;数据页刷新是较大块、随机、可批量异步的写;索引查找则是 4 至 8 KB 的随机读。把它们混在一起看平均 IOPS,会掩盖真正的瓶颈。

提交延迟是 QD1 问题

提交路径上事务是串行等待的:应用发出 fsync 或带 FUA 的写后必须等盘返回完成,才能向客户端应答。此时队列深度往往只有一到两个,吞吐指标完全不起作用,起作用的是 QD1 写延迟。J750/J770 规划的 QD1 平均 4KB 随机写延迟为 10 µs,远低于读的 65 µs,原因在于写在 PLP 保护下于主控缓冲即可安全确认,而读必须真正穿越 NAND 阵列和纠错流水线。没有掉电保护的盘只有两个选择:牺牲这条快路径,或者在掉电时丢失已确认的事务。对数据库而言后者不可接受。

数据页刷新决定 DWPD 档位

盘上实际写入量通常远大于应用层的逻辑写入量。数据库自身的页大小(8 或 16 KB)对 4 KB 修改的放大、双写缓冲、检查点重复刷新都会叠加。做容量规划时应先估算五年累计写入总量,再回到 DWPD。一块 3.84 TB 的 1 DWPD 盘每天允许写入 3.84 TB 并维持五年,同一容量档的 3 DWPD 产品则是三倍。J750 定为 1 DWPD、J770 定为 3 DWPD,正对应读多写少与持续高写入两类负载,OLTP 主库通常落在后者。

为什么 P99 比平均值更值得看

数据库的锁与事务超时对最慢的那一小部分请求最敏感。一次 GC 引起的毫秒级停顿会让持锁事务延长,进而在并发场景下放大成连锁排队,表现为吞吐骤降而非延迟温和上升。因此评估用盘必须在充分预处理后的稳态下测 P99 与 P99.9 写延迟,新盘的平均值没有参考价值。

指标到选型的换算

J770 规划 600 KIOPS 4KB 随机写、1,500 KIOPS 随机读,容量档 1.6/3.2/6.4/12.8 TB。顺序是:按五年写入总量定 DWPD,按提交延迟预算校验队列配置,最后才核对峰值 IOPS 余量。以上均为产品定义/EVT 阶段的规划值,需在客户实际负载回放中复核。

关键词
OLTP预写日志WALfsyncQD1延迟DWPDP99尾延迟军航科工