关于内存使用 memstore的设置

【 使用环境 】生产环境
【 OB or 其他组件 】ob
【 使用版本 】 OceanBase_CE 4.1.0.0
【问题描述】
4.0之后的版本,默认 memstore_limit_percentage=50% freeze_trigger_percentage=20%

现在有个环境,租户内存是50GB, 按照默认设置,memstore可用内存就是25GB,触发冻结的阈值是25GB*20%=5GB。 看监控active memstore的使用量基本都在5GB以下

问题:
1、触发freeze的默认阈值为啥由70%调整成20%了。 按照上面说的情况, memstore里基本有20GB内存都是空闲的
2、看监控 row_cache的命中率基本都是70%徘徊。 是不是可以调小memstore_limit_percentage,让更多的内存给kvcache使用 用来缓存row cache??

【复现路径】问题出现前后相关操作
【问题现象及影响】

【附件】

1)这是因为从底层解决了大事务能力的支持,事务不再受冻结操作影响,所以调整了这个参数的默认值;
2)memstore_limit_percentage和row cache应该是没关系的

1、memstore 20GB, 冻结阈值20%, 那剩余的80%是干什么用的 ? 我看监控内存使用量一直没有超过冻结阈值
2、row_cache应该是属于可动态伸缩的内存吧? 调低memstore_limit_percentage, 可动态伸缩的内存就多了啊, 那row_cache也会相应的多一点吧, 命中率会高一点。 不知道到这样想对不对

产品刚发布的时候大家都喜欢小内存机器去部署OB,一开并发压测就容易报错。这么小的内存转储可能跟不上导致MEMTABLE内存用尽。 所以触发转储的参数就调小了。

如果是部署在生产环境,服务器内存有个200G时,大可以将这个参数调整回 70% 。 另外加上限流保护阈值(90%),内存消耗很快的时候回旋空间就是 (70%~90%)。那个时候如果又担心内存用尽,就可以再调小一些,如 50% 。

明白你的意思, freeze_trigger_percentage调整的很小 如20%, 转储就会快一点, 可以防止突然的大并发,把memstore用光,导致写被禁止。

请教下 下面这个想法对不对?
2、row_cache应该是属于可动态伸缩的内存吧? 调低memstore_limit_percentage, 可动态伸缩的内存就多了, 那row_cache也会相应的多一点吧, 命中率会高一点。 不知道到这样想对不对

所以冻结的内存就是为memstore保留的那一部分避免内存过量使用的内存,也就是在memstore_limit内存的基础上再减去memstore_limit-(memstore_limit * freeze_trigger_percentage)呗。