3.2 WAL:评估 Value Log 先 fsync 再 WAL fsync 对写吞吐的影响 #3
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
第 3.2 和 3.9 节要求
Always策略下,如果 WAL Entry 引用 Value Log record,发布 WAL Batch 前被引用对象也必须已持久化。大值写入流程是先 append + fsync Value Log record,再写入并 fsync WAL Batch。问题
该顺序能避免恢复后出现悬空 Value Log pointer,但大 value 写入会引入至少两次 fsync:
这与项目“写吞吐极致”的核心目标存在潜在冲突。
风险
在大 value 或混合负载下,默认
Always策略可能因双 fsync 显著降低写吞吐,并削弱 group commit 的收益。建议
在设计文档中明确这是有意取舍,或评估替代方案:
Always下优先保证无悬空指针参考
docs/design.md:130WAL Entry 引用外部持久化对象的发布要求docs/design.md:746Value Log 写入流程docs/design.md:760Value Log 与 WAL 的崩溃一致性