我的理解:
转储的概念就是做小版本冻结(minor freeze),冻结memtable(frozen memtable)直接flush为mini sstable,mini sstable个数由minor_compact_trigger参数决定,冻结memtable(frozen memtable)被清空重用。mini sstable写到minor sstable里,每次转储会将memtable数据与前一次转储的数据合并(merge),转储文件最终合并到sstable中。
转储的作用:
解决资源消耗高、单组合memstore使用率高触发集群级合并、合并时间长,memstore内存释放不及时造成memstore满而数据写入失败 的问题。
转储的副作用:
数据层级多,查询链路长,查询性能下降。
冗余数据增多,占更多磁盘空间
转储功能适用场景:
1.跑批、大量数据导入,写memstore的速度很快,需要memstore内存尽快释放。
2.业务峰值交易量大,写入memstore的数据很多,但不想再峰值触发合并(major freeze),希望合并延后。
转储参数与常用配置:
minor_freeze_times
1.控制两次合并之间的转储次数,达到此次数,就自动触发合并(major freeze)
2.设置为0表示关闭转储。每次组合memstore使用率达到冻结阈值(freeze_trigger_percentage)都直接触发集群合并
3.增大该值尽量避免峰值交易时段触发合并(major freeze),将合并时机延后到低峰值的每日合并(major_freeze_duty_time)
minor_merge_concurrency
1.并发做转储的分区个数,单个分区暂不支持拆分转出,分区表可加速。
2.并发转储的分区过少,影响转储性能和效果(例如memstore内存释放不够快)
3.并发转储的分区过多,同样会消耗过多资源,影响在线交易性能。
4.减小该值(比如40),使memstore尽早释放,进一步降低memstore写满的概率
OB tidb
active memtable = memtable
frozen memtable = immutable
L0 mini SStable = level 0
L1 minor sstable
L2 major sstable