【单选题】造成 MVCC 读性能下降的主要原因是?

造成 MVCC 读性能下降的主要原因是?
A. 事务版本数据过多,需要遍历大量历史快照
B. 开启自动提交事务
C. 合理创建本地索引
D. 定时执行 Minor 增量合并

1 个赞

正确答案是 A. 事务版本数据过多,需要遍历大量历史快照

逐项分析

A. 事务版本数据过多,需要遍历大量历史快照 — :white_check_mark: 正确

MVCC(多版本并发控制)的核心原理是为每行数据维护一条版本链,每次更新都会生成一个新的版本快照。当事务读取数据时,需要根据自身的快照时间点,沿着版本链逐条回溯,找到对自己可见的那个版本。

导致版本链过长的常见原因包括:

  • 长事务未提交:事务长时间持有旧快照,阻止旧版本被回收(GC),导致版本链越来越长。
  • 高并发写入:热点行被频繁更新,产生大量历史版本。
  • 合并(Compaction)不及时:旧版本数据未能通过合并操作被清理。

版本链越长,每次读取需要遍历的节点越多,读性能就越差。

B. 开启自动提交事务 — :x: 错误

自动提交事务意味着每条 SQL 执行完就立即提交,事务生命周期极短,快照版本很快就能被回收,反而有利于减少版本堆积,对 MVCC 读性能是正面的。

C. 合理创建本地索引 — :x: 错误

合理创建索引是优化查询性能的手段,通过索引可以快速定位目标数据,减少扫描范围,与 MVCC 读性能下降无关。

D. 定时执行 Minor 增量合并 — :x: 错误

Minor 合并(增量合并)会将 MemTable 中的数据刷写到 SSTable 并进行版本整理,有助于清理旧版本数据、缩短版本链,是改善 MVCC 读性能的手段,而非导致性能下降的原因。

2 个赞