造成 MVCC 读性能下降的主要原因是?
A. 事务版本数据过多,需要遍历大量历史快照
B. 开启自动提交事务
C. 合理创建本地索引
D. 定时执行 Minor 增量合并
1 个赞
正确答案是 A. 事务版本数据过多,需要遍历大量历史快照。
逐项分析
A. 事务版本数据过多,需要遍历大量历史快照 —
正确
MVCC(多版本并发控制)的核心原理是为每行数据维护一条版本链,每次更新都会生成一个新的版本快照。当事务读取数据时,需要根据自身的快照时间点,沿着版本链逐条回溯,找到对自己可见的那个版本。
导致版本链过长的常见原因包括:
- 长事务未提交:事务长时间持有旧快照,阻止旧版本被回收(GC),导致版本链越来越长。
- 高并发写入:热点行被频繁更新,产生大量历史版本。
- 合并(Compaction)不及时:旧版本数据未能通过合并操作被清理。
版本链越长,每次读取需要遍历的节点越多,读性能就越差。
B. 开启自动提交事务 —
错误
自动提交事务意味着每条 SQL 执行完就立即提交,事务生命周期极短,快照版本很快就能被回收,反而有利于减少版本堆积,对 MVCC 读性能是正面的。
C. 合理创建本地索引 —
错误
合理创建索引是优化查询性能的手段,通过索引可以快速定位目标数据,减少扫描范围,与 MVCC 读性能下降无关。
D. 定时执行 Minor 增量合并 —
错误
Minor 合并(增量合并)会将 MemTable 中的数据刷写到 SSTable 并进行版本整理,有助于清理旧版本数据、缩短版本链,是改善 MVCC 读性能的手段,而非导致性能下降的原因。
2 个赞