【多选题】OceanBase MVCC 多版本机制,带来哪些效果()
A. 读操作不会阻塞写
B. 写操作不会阻塞读
C. 数据旧版本占用磁盘空间
D. 不会产生任何垃圾版本,无需回收
答案:A、B、C
A. 读操作不会阻塞写
正确。MVCC 机制下,读操作读取的是数据的某个历史快照版本,不需要加锁,因此不会阻塞正在进行的写操作。
B. 写操作不会阻塞读
正确。写操作会创建数据的新版本,而读操作通过快照读取旧版本,两者互不干扰。OceanBase 官方文档明确指出:read-write 和 write-read 操作之间不会相互阻塞,极大提升了系统的并发能力。
C. 数据旧版本占用磁盘空间
正确。MVCC 的核心机制就是保留数据的多个版本。OceanBase 基于 LSM-Tree 架构,每次更新都会追加新版本记录,旧版本数据会持续占用存储空间,直到被 compaction 合并或超过 undo_retention 时间后才会被清理。
D. 不会产生任何垃圾版本,无需回收
错误。MVCC 会产生大量不再被任何活跃事务引用的旧版本数据(即"垃圾版本")。OceanBase 需要通过以下机制来回收这些冗余数据:
-
Compaction(合并) :在转储和合并过程中,根据
undo_retention参数(默认 1800 秒)清理超出保留时间的旧版本数据。 - 引用计数 :V4.1 版本引入了引用计数器机制,只有当旧版本的引用计数为 0(即没有任何事务需要读取该版本)时,才会被真正删除。