OceanBase V4 中如何处理长事务/大事务导致的 MemTable 内存压力?
传统 LSM-Tree 架构中,未提交事务的数据必须常驻 MemTable,长事务会持续占用内存直至提交或回滚,容易撑爆 MemTable。OceanBase 的解决方案是 活跃事务落盘 。
机制说明:
- 未提交的长事务中间数据可以被转储到磁盘上,脱离 MemTable 的内存约束。
- 落盘后事务语义依然保持:数据仍处于"未提交"状态,可通过回滚段撤销或后续补全提交。
- 依赖事务状态表(Transaction Status Table)和回滚段(Undo Log)保证事务的完整性和可回滚性。
收益: 大幅缓解长事务对 MemTable 内存的压力,使 OceanBase 能够支撑大事务场景;代价是事务状态管理复杂度提升。