Each language version is independently generated for its own context, not a direct translation.
这篇论文讲述了一个关于如何让数据库(DBMS)和固态硬盘(SSD)“握手言和”,从而跑得更快、寿命更长的故事。
想象一下,你的数据库是一个繁忙的图书馆,而 SSD 就是图书馆的书架。
1. 核心问题:为什么现在的图书馆效率低且容易坏?
在传统的图书馆管理方式(原地写入/In-place)中,规则是这样的:
- 死板的规则:如果你要修改一本书(数据页),管理员必须把旧书从架子上拿下来,撕掉,然后把新书严丝合缝地塞回原来的那个位置。
- 双重搬运(Doublewrite):为了防止停电导致书没写完(数据损坏),管理员会先复印一份放在“临时复印区”(Doublewrite Buffer),确认无误后,再正式替换书架上的旧书。这相当于每改一次书,就要搬运两次。
- SSD 的“强迫症”:SSD 这种“书架”有个怪脾气。它不能只擦除“一页纸”,它必须把整“一大块”(Block)都擦掉才能重写。如果这块里还有几页没坏的书,管理员就得先把那些好书搬出来,擦掉整块,再把好书搬回去,最后才放新书。
后果是什么?
- 写放大(Write Amplification):你只想改 1 本书,结果因为要复印、要搬来搬去、要擦整块书架,实际上 SSD 内部可能写了 5 本书的内容。
- 寿命缩短:SSD 的擦写次数是有限的。这种“过度搬运”就像让一个搬运工干 5 个人的活,书架很快就磨损报废了。
- 速度慢:大家都在忙着搬运和擦除,没空真正处理读者的请求。
2. 解决方案:ZLeanStore(新式图书馆管理法)
这篇论文提出了一套全新的管理策略,核心思想是:别死守原来的位置,哪里有空位就放哪里(Out-of-place)。
这就好比图书馆不再要求“书必须放回原架”,而是允许管理员把新书直接放在任何有空位的架子上,然后更新一张“索引卡”告诉读者:“那本书现在在 3 号架的 5 层”。
基于这个核心改变,作者提出了几个“魔法技巧”:
技巧一:打包压缩(Compression & Page Packing)
- 比喻:以前每本书都占一个固定的大格子(4KB),哪怕书里只有几行字,格子也是满的。现在,管理员把书的内容压缩(像把衣服塞进真空袋),然后智能打包。
- 效果:把几本压缩后的书塞进一个格子里,既省空间,又减少了搬运次数。而且,他们设计了一种“打包法”,确保读者拿书时,一次就能拿到完整的一包,不用拆开再拼凑。
技巧二:按“死亡时间”分组(Grouping by Deathtime)
- 比喻:有些书是“畅销书”(经常改),有些是“古籍”(几乎不改)。
- 旧做法:不管什么书,都混在一起放。结果清理书架时,为了拿一本旧书,不得不把旁边还没过期的畅销书也搬来搬去,效率极低。
- 新做法:管理员预测每本书大概什么时候会“过期”(被修改),把寿命相似的书放在同一个区域。
- 效果:当需要清理时,整个区域的书可能都“过期”了,直接一次性清空,不需要把好书搬来搬去。这大大减少了无谓的搬运。
技巧三:与书架管理员(SSD)配合
- 背景:SSD 内部也有自己的清理机制(垃圾回收 GC)。如果数据库乱塞,SSD 就会疯狂搬运。
- 新做法:
- 对于普通 SSD:数据库会计算好,确保自己塞书的方式,正好符合 SSD 内部清理的“节奏”。就像两个人跳舞,步调一致,就不会踩脚。
- 对于高级 SSD(ZNS/FDP):这些新型书架允许图书馆直接指挥:“请把书放在第 3 区”。数据库利用这个功能,彻底消除了 SSD 内部的额外搬运。
3. 结果:发生了什么奇迹?
通过这套“新式管理法”(ZLeanStore),论文在实验中取得了惊人的效果:
- 速度翻倍:图书馆处理读者的速度(吞吐量)提高了 1.65 到 2.24 倍。
- 寿命延长:SSD 实际受到的磨损(写入量)减少了 6 到 9 倍。这意味着原本只能用 1.5 个月的硬盘,现在可能用 1 年甚至更久。
- 兼容性:这套方法不仅适用于普通硬盘,还能完美适配最新的 ZNS 和 FDP 技术。
总结
这篇论文告诉我们:不要试图让 SSD 去适应数据库,也不要让数据库盲目地适应 SSD。
最好的办法是打破“原地修改”的旧规矩,让数据库掌握主动权,利用“哪里有空位放哪里”的灵活性,配合压缩和智能分组,把数据写得更少、更整齐。这样,SSD 就不用做那些累死累活的“搬运工”工作了,整个系统自然跑得更快、更久。
一句话概括:把“死板地原地修补”变成“灵活地哪里有空放哪里”,让数据库和 SSD 配合得天衣无缝,既快又省。
Each language version is independently generated for its own context, not a direct translation.
这是一篇关于数据库系统如何优化 SSD 写入以最大化性能并延长寿命的学术论文总结。该论文已被 PVLDB 2026 接收。
1. 问题背景 (Problem)
现代数据库管理系统(DBMS)虽然针对 SSD 的读取特性进行了优化,但在写入优化方面仍存在严重不足。主要问题包括:
- 写放大 (Write Amplification, WA) 严重: 数据库系统发出的逻辑写入在 DBMS 内部和 SSD 内部被多次放大。
- DBMS 层: 传统基于 B+ 树的系统(如 MySQL, PostgreSQL)通常采用原地写入 (In-place Writes)。为了保证数据一致性(防止掉电导致页损坏),它们使用双写缓冲 (Doublewrite Buffering, DWB),导致每个逻辑页写入实际上产生 2 倍的物理写入。
- SSD 层: SSD 内部机制(页写入、块擦除)导致其自身也会产生写放大。当 SSD 进行垃圾回收 (GC) 时,需要搬运有效数据以腾出块空间,这进一步增加了物理写入量。
- 总写放大 (Total WAF) 被忽视: 传统的优化往往只关注 DBMS 层或 SSD 层,忽略了两者之间的相互作用。实际上,总写放大是两者的乘积(Total WAF=DB WAF×SSD WAF)。仅优化一层可能导致另一层恶化,最终增加总写入量。
- 寿命与性能瓶颈: 过高的写放大不仅降低 SSD 寿命(NAND 闪存有擦写次数限制),还会因为内部 GC 争抢带宽而降低吞吐量。
2. 方法论 (Methodology)
论文提出了一套基于非原地写入 (Out-of-Place Writes) 的优化方案,并重新设计了存储引擎 LeanStore(称为 ZLeanStore)来实现这些优化。核心思想是让 DBMS 掌握写入模式,主动协调 DB 层和 SSD 层的写放大。
核心架构转变:从原地到非原地
- 非原地写入: 允许 DBMS 将数据写入 SSD 上的任意位置,而不是覆盖固定地址。这消除了对双写缓冲 (DWB) 的依赖,因为旧版本在确认新版本持久化之前仍然有效,从而直接消除了 DB 层的 2 倍写放大。
- 灵活的写入放置: DBMS 可以根据工作负载特征(如数据热度、预期失效时间)智能地安排数据在 SSD 上的物理位置。
关键优化技术
压缩与页面打包 (Compression & Page Packing):
- 对每个 4KB 页面进行压缩。
- 页面打包: 将多个压缩后的页面打包到 4KB 边界对齐的槽位中。这既利用了压缩减少写入量,又避免了因压缩后页面大小不一导致的读取放大(Read Amplification)和对齐问题,确保每次读取只需一次 4KB I/O。
基于死亡时间的分组 (Grouping by Deathtime, GDT):
- 利用数据库语义估计每个页面的“死亡时间”(即下一次被覆盖的时间)。
- 将具有相似死亡时间的页面分组写入同一个 SSD 区域(Zone)。
- 目的: 在 DB 层进行垃圾回收时,能够一次性清除整个区域的有效数据,避免在回收过程中搬运大量有效数据,从而显著降低 DB 层的写放大。
对齐 DB 与 SSD 的 GC 粒度 (Aligning DB and SSD GC Units):
- 对于非 ZNS 的普通 SSD,DB 的 GC 单元(Zone 大小)应与 SSD 内部的 GC 单元(如 Reclaim Unit 或 Superblock)对齐。
- 目的: 确保具有相同死亡时间的页面被放置在 SSD 的同一个物理块中,防止不同生命周期的数据混合,从而减少 SSD 内部 GC 产生的写放大。
NoWA 模式 (No Write Amplification Pattern):
- 针对不支持 ZNS 或 FDP 的普通商用 SSD。
- 通过控制并发打开的 Zone 数量和频率,确保在 SSD 触发内部 GC 之前,至少有一个 Superblock 完全无效。
- 补偿写入: 如果检测到不同 Zone 的失效频率不平衡,DBMS 会主动发送补偿写入来重新平衡,确保 SSD 始终能在不产生额外搬运的情况下完成 GC,从而保证 SSD WAF=1。
支持新型 SSD 接口 (ZNS & FDP):
- ZNS (Zoned Namespace): 设计天然适配 ZNS,利用其顺序写入和主机管理 GC 的特性,直接实现 SSD WAF=1。
- FDP (Flexible Data Placement): 利用 FDP 提供的放置提示 (Placement Hints),将不同死亡时间的数据流引导至不同的 Reclaim Unit Handles,避免内部数据混合,同样实现 SSD WAF=1。
3. 主要贡献 (Key Contributions)
- 理论突破: 首次系统性地论证了 DBMS 应作为最高层来协调并最小化总写放大 (Total WAF),而非仅优化单一层级。
- 架构创新: 将 LeanStore 从原地写入重构为非原地写入,并引入了一套完整的优化组合(压缩、GDT、NoWA 等)。
- 通用性与兼容性:
- 该设计不仅适用于 ZNS 和 FDP 等新型接口,还通过"NoWA"模式在普通商用 SSD 上实现了 SSD WAF=1 的突破。
- 提出的优化方案(如页面打包、GDT)可以应用于其他基于 B+ 树的系统。
- 实证数据: 在多种企业级 SSD、不同数据集大小和负载(YCSB-A, TPC-C)下进行了广泛评估。
4. 实验结果 (Results)
实验在 YCSB-A 和 TPC-C 负载下,使用多种企业级 SSD(如 Samsung PM9A3, Kioxia CM7R 等)进行:
- 吞吐量提升:
- 在 YCSB-A 负载下,吞吐量提升了 1.65 倍 到 2.24 倍。
- 在 15,000 个仓库的 TPC-C 负载下,吞吐量提升了 2.45 倍。
- 写放大显著降低:
- YCSB-A: 每个事务的闪存写入量减少了 6.2 倍 到 9.8 倍。
- TPC-C: 闪存写入量减少了 7.2 倍。
- 总写放大 (Total WAF): 从原地写入的 4.7 倍左右降低至 0.6 左右(接近理论最优值,即仅包含用户数据写入)。
- SSD 写放大 (SSD WAF): 在普通 SSD 上成功实现了 1.0(即无内部写放大)。
- 寿命延长: 由于物理写入量大幅减少,SSD 的理论寿命显著延长(例如,实验中的 SSD 原本预计 1.5 个月达到寿命极限,优化后寿命大幅延长)。
- 资源开销: 压缩带来的 CPU 开销在 I/O 密集型场景下可忽略不计;内存元数据开销在极端情况下约为 10.9GB,但在可控范围内。
5. 意义与影响 (Significance)
- 重新定义存储优化: 证明了在 DBMS 层进行写入控制比依赖底层文件系统或 SSD 固件更有效。DBMS 拥有最丰富的负载语义(如数据热度、访问模式),能够做出更智能的放置决策。
- 延长硬件寿命: 对于云服务和数据中心,减少写放大直接意味着降低存储成本、电力消耗和碳足迹,并显著延长昂贵的企业级 SSD 的使用寿命。
- 技术普适性: 该方案不仅适用于未来的 ZNS/FDP 设备,也能通过软件算法在现有的普通 SSD 上实现类似效果,具有极高的落地价值。
- 未来方向: 为 LSM 树引擎、多设备部署以及基于磁盘/HM-SMR 的系统提供了优化思路。
总结: 这篇论文通过彻底改变数据库的写入策略(从原地到非原地),并结合智能的页面管理、垃圾回收和 SSD 接口适配,成功解决了长期困扰高性能数据库的写放大问题,实现了性能与寿命的双重飞跃。