limit tikv memory

【 TiDB 使用环境】生产环境 or 测试环境 or POC
【 TiDB 版本】v5.4.0
【遇到的问题】主动限制 tikv 内存大小
【复现路径】做过哪些操作出现的问题
【问题现象及影响】

【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

------------------------------------------------------- 分割线 -------------------------------------------------------
有没有什么办法或者参数配置可以限制 tikv 的内存使用而不会导致 OOM

尝试过配置如下参数,但从监控结果来看,tikv的内存使用还是超过预期值
[storage]
reserve-space = “0MB”
[storage.block-cache]
capacity = “500MB”
rocksdb.defaultcf.block-cache-size = “500MB”
rocksdb.writecf.block-cache-size = “300MB”
rocksdb.lockcf.block-cache-size = “40MB”
raftdb.defaultcf.block-cache-size = “40MB”

1、storage.block-cache.shared是true还是false?true的话只有storage.block-cache.capacity才起作用
2、TiKV总内存就是Block Cache + 2.5GB左右

看起来你设置的内存都比较小。还要注意其他占用内存的情况:


TiKV 内存参数性能调优 | PingCAP Docs

意思是 2.5GB < tikv memory <= BLOCK_CACHE + 2.5GB 吗?
这个 2.5GB 的估算值是哪部分模块占用的空间呢?

我示例的配置确实小,因为我在测验小内存场景下,我的 tikv 的内存值会不会降到 预设值 以下,以此来验证 block-cache 确实能够主动限制 tikv 的内存使用。

raftdb中的default cf,kvdb中的default cf、write cf和lock cf,每个CF最多允许5个MemTable存在(max-write-buffer-number参数),每个MemTable默认128MB,所以就是4乘以5乘以128mb

那这么说,tikv 的内存空间的极限值为 4 * (1/8)GB * num_memtable + block_cache.
如果令 block_cache = 0.5GB(shared = true),
即 min_mem = 0.5GB * (num_memtable + 1),
能否这样计算呢?

可以这样计算,但是也要考虑楼上caiyfc所说的,TiKV在处理大的查询时可能会临时占用的一部分内存

3ks

那如何控制最大内存使用呢?如果通过设置 k8s limits 会导致 oom,有没有方法可以控制最大内存呢

如果要全局控制的话,可以使用memory_limit来限制TiKV进程的最大内存,它会写入/etc/systemd/system/tikv-20160.service
https://docs.pingcap.com/zh/tidb/stable/tiup-cluster-topology-reference#global

那应该怎么配置呢?通过配置operator yaml似乎没生效。
tikv:
additionalVolumeMounts:
- mountPath: /var/lib/raftlog
name: raftlog
- mountPath: /var/lib/rocksdblog
name: rocksdblog
additionalVolumes:
- emptyDir: {}
name: raftlog
- emptyDir: {}
name: rocksdblog
baseImage: pingcap/tikv
config: |
global:
resource_control:
memory_limit: “500M”

比如这样:

reload完以后,systemd下面就多了一行配置

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。