tikv内存配置参数

【 TiDB 使用环境】生产环境
【 TiDB 版本】7.1.0
【复现路径】无
【遇到的问题:问题现象及影响】
【资源配置】
【TiDB Operator 版本】:v1.4.6
【K8s 版本】:v1.19
【附件:截图/日志/监控】

memory-usage-limit
storage.block-cache.capacity
raftstore.capacity
raft-engine.memory-limit

在tikv配置参数中有如上几个和内存相关的配置参数,问题如下:

1、这些参数分别有什么影响,如果配置不合理(比如pod内存10g,参数配置超过了10g)会有什么效果
2、这些参数之间有没有内在关系,比如他们之和不能大于pod内存
3、在一个内存64g的pod中,这些参数建议按什么比例进行配置,或者直接给个参考配置

只需要设置storage.block-cache.capacity即可,设置成你pod内存的45%,例如pod内存10g,参数配置为4.5G即可,其他不需要设置。

如果这些参数不设置,采用默认值会不会导致pod的oom

尤其像memory-usage-limit 这个参数,感觉这个就跟mysql的buffer pool一样,如果不明确设置大小,一旦同台物理机器上存在多个tikv实例,此时一定会触发oom

预留15-20%的内存比较好,高峰期负载压力大来不及处理 :joy:

只需要设置storage.block-cache.capacity这个就行,这个设置之后,一个tikv内存占用不会超过storage.block-cache.capacity值的2.2倍,这个才是类似mysql的buffer pool用来缓存数据的。
memory-usage-limit 对tikv的内存限制效果一般,这个限制的是整个tikv使用的内存上限,但有时候限制不住。
如果你一个64G的机器,上面1个tikv,就把tikv的memory-usage-limit设置成64G0.45
如果有俩个tikv,就是64G/2
0.45,依此类推,这样设置你的tikv肯定不会触发内存oom

ok,明白

raft-engine.memory-limit 这个参数如果设置过大,会不会导致pod oom

tikv只设置storage.block-cache.capacity ,其他别动

预留多一些即可

我们的tidb集群是在k8s环境运行的,而且还有很多套tidb集群,如果不设置的话会不会有oom的风险或者性能上的风险

“一个tikv内存占用不会超过storage.block-cache.capacity值的2.2倍”,照这个公式推下去,如果一个pod分配了22g内存,那么storage.block-cache.capacity最多设置为10g,是不是这个道理

其实我这个地方的需求点是保证tikv的所有内存使用量不能超过pod内存的80%,
比如pod内存是100g,那么tikv整个程序的内存使用量不能超过80g

对,如果这样配置,你的pod不会出现oom,2.2倍里面已经预留了一部分内存给操作系统。

ok,明白