租户memstore使用达到阈值后,选择合并或者转储的依据是什么?假如上次合并失败,冻结后会继续执行合并吗?

租户memstore使用达到阈值后,选择合并或者转储的依据是什么?假如上次合并失败,冻结后会继续执行合并吗?

有两种转储方式:自动转储和手动转储,第一种是当memstore使用达到预设的限定是,例如memstore内存使用率大于 memstore_limit_percentage * freeze_trigger_percentage的值,memstore就会被冻结,由后台线程自动转储成sstable,第二种是执行alter system minor freeze 手动转储。
有三种合并方式:自动合并、定时合并与手动合并。如果自动合并过程中失败了,除了个别错误外,会一直重试,

个别错误是指什么?能描述下吗?

我觉得选择合并或者转储的依据应该是根据minor_freeze_times参数与__all_virtual_tenant_memstore_info中的free_cnt计数比较后,如果大于这个cnt就会触发合并,如果小于,则触发转储。

1 个赞

另外关于上次合并失败,在冻结后会继续合并的原理是什么,能否提供相关文档参阅?

例如checksum error,合并后校验不通过,这种就不会重试。

那什么情况下会造成校验不通过呢?

你看下ObTenantTabletScheduler::start这个函数吧,这是合并的入口

合并过程出现异常,例如磁盘读写错误,导致部分数据丢失

合并在默认情况下是以每日合并的方式定时触发的。
memstore达到阈值后是自动触发冻结+转储,转储为mini sstable后根据minor_compact_trigger来触发mini minor或minor merge。并不存在达到阈值后选择合并或转储的说法

如果一次合并没有完成,调度合并的地方会持续调度该版本的合并,尝试让失败的分区重做合并任务