近墨者
#1
【 使用环境 】生产环境
【 OB or 其他组件 】
【 使用版本 】3.2.3
【问题描述】清晰明确描述问题
如果一个租户的内存为128GB,memstore的使用率不高,active在每天的合并前维持在20G以下,但是内存被kvcache占用了大部分,内存的使用率维持在98%。memstore_limit_percent是50%。kvcache占用这么大的内存,是ob自动把数据缓存的,还是大量的全表查询缓存的。如果这个时候,有批处理,大量数据写入,kvcache需要把内存还给memstore,内存的动态调整会影响数据的写入效率吗?
【复现路径】问题出现前后相关操作
【问题现象及影响】
【附件】
夏进
#3
总体上租户主要内存包含kvcache和memstore两部分组成。memstore_limit_percentage参数决定memstore的上限,其余内存交给kvcache动态伸缩管理。kvcache主要缓冲kv等数据,会定期的做淘汰,因此可以不需要手动干预。如果有大量的数据写入,我理解你的场景可能想尽可能的压缩kvcache的空间,那么你可以设置memstore_limit_percentage 大一点,让memstore占用尽可能多的租户内存,或者设置freeze_trigger_percentage小一点,让其转储的速度快一些。
Gaoyc
#4
1 个赞
近墨者
#5
你的解释跟官网的说法不一致。截图中,如果租户memory是100G,那么memstore分配50%的上限就是50GB。但是租户运行中每天的memostore最多用10GB,那么另外的40GB就会被KVcache抢占,当memstore想占用更多时,kvcache再释放内存给memstore用。
夏进
#7
嗯,如果是这种场景,那memstore是只有10G的内存的,但如果memstore已经是占用50G了,那kvcache只能从剩余的50G去分配。