Skip to main content
QUICK REVIEW

[论文解读] CoroBase: Coroutine-Oriented Main-Memory Database Engine

Yongjun He, Jiacheng Lu|arXiv (Cornell University)|Oct 29, 2020
Distributed systems and fault tolerance被引用 5
一句话总结

CoroBase 引入了一种协程到事务的模型,使内存数据库引擎能够实现事务间的批处理,通过异步预取隐藏数据停顿,同时保持向后兼容性。在 48 核服务器上,与优化后的基线相比,其在读密集型工作负载上实现了最高 2 倍的性能提升。

ABSTRACT

Data stalls are a major overhead in main-memory database engines due to the use of pointer-rich data structures. Lightweight coroutines ease the implementation of software prefetching to hide data stalls by overlapping computation and asynchronous data prefetching. Prior solutions, however, mainly focused on (1) individual components and operations and (2) intra-transaction batching that requires interface changes, breaking backward compatibility. It was not clear how they apply to a full database engine and how much end-to-end benefit they bring under various workloads. This paper presents \corobase, a main-memory database engine that tackles these challenges with a new coroutine-to-transaction paradigm. Coroutine-to-transaction models transactions as coroutines and thus enables inter-transaction batching, avoiding application changes but retaining the benefits of prefetching. We show that on a 48-core server, CoroBase can perform close to 2x better for read-intensive workloads and remain competitive for workloads that inherently do not benefit from software prefetching.

研究动机与目标

  • 解决由于 CPU 与内存性能差距导致的指针追踪引发的数据停顿问题。
  • 克服先前软件预取技术的局限性,这些技术需要应用层更改或仅关注单个操作。
  • 通过支持事务间批处理同时保持向后兼容性,在完整数据库引擎中实现端到端性能提升。
  • 设计一种基于协程的执行模型,利用轻量级上下文切换,在事务间高效重叠计算与数据预取。
  • 评估基于协程的预取在生产级数据库引擎中对多样化工作负载的实际性能影响。

提出的方法

  • 将数据库事务建模为协程,以实现细粒度的协作多任务处理和事务间批处理。
  • 引入两级协程设计:每个请求一个轻量级协程,以及一个更高层级的协程调度器,用于管理多个事务间的批处理。
  • 在指针解引用点插入预取和挂起操作,以实现内存访问与计算的重叠。
  • 使用 C++20 协程来简化异步、流水线执行的实现,避免低层级状态机管理。
  • 通过允许现有单记录事务接口与基于协程的批处理共存,保持向后兼容性。
  • 优化协程帧管理,以减少内存占用和切换开销,平衡性能与资源使用。

实验结果

研究问题

  • RQ1是否可以无需应用更改,在完整数据库引擎层面有效应用基于协程的软件预取?
  • RQ2与事务内或点解决方案相比,通过协程实现事务间批处理,能带来多大程度的端到端性能提升?
  • RQ3协程到事务的批处理对本身无法从预取中受益的工作负载有何性能影响?
  • RQ4两级协程设计在高并发环境中如何在性能、内存开销和切换成本之间取得平衡?
  • RQ5在现代多核服务器上,基于协程的预取在真实数据库工作负载中能在多大程度上隐藏数据停顿?

主要发现

  • CoroBase 通过使用协程实现事务间批处理,有效隐藏了数据停顿,在读密集型工作负载上实现了最高 2 倍的性能提升。
  • 协程到事务的模型实现了透明的性能提升,无需更改现有应用接口或事务 API。
  • 在无法从预取中受益的工作负载上,CoroBase 仍能与高度优化的基线系统保持竞争力,表明性能退化极小。
  • 两级协程设计减少了内存占用和切换开销,性能优于单级协程模型。
  • 与事务内批处理相比,事务间批处理显著增加了预取机会,尤其对短事务或单记录事务效果更明显。
  • 使用 C++20 协程简化了软件预取的实现,同时保持了低切换成本,使其在生产级数据库引擎中具有实际可行性。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。