tikv内存的计算方法

一个好的问题描述有利于社区小伙伴更快帮你定位到问题,高效解决你的问题

【TiDB 使用环境】生产环境 /测试环境
【TiDB 版本】
【部署方式】云上部署(腾讯云 标准型SA5 16C32G)
【操作系统/CPU 架构/芯片详情】
【机器部署详情】CPU大小/内存大小/磁盘大小
【集群数据量】
【集群节点数】
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】


目前的问题是,生产环境有两套TIDB集群,tikv节点的配置都是 16C32G 的标准型SA5 云主机。storage.block-cache 相关的配置都一样,但是两套集群的 Tikv 内存使用率相差挺大,一个平均在80% ,一个平均在85%


相关的背景信息如下

1、tiup cluster show-config xxx中关于 storage.block-cache.capacity 的配置如下

server_configs:
  tidb: {}
  tikv:
    raftstore.capacity: 0
    readpool.coprocessor.use-unified-pool: true
    readpool.storage.use-unified-pool: true

2、TIDB集群中查看tikv角色的 storage.block-cache的配置如下

| tikv | x.x.x.x:20160 | storage.block-cache.capacity              | 14867282534B |
| tikv | x.x.x.x:20160 | storage.block-cache.high-pri-pool-ratio   | 0.8          |
| tikv | x.x.x.x:20160 | storage.block-cache.memory-allocator      | nodump       |
| tikv | x.x.x.x:20160 | storage.block-cache.num-shard-bits        | 6            |
| tikv | x.x.x.x:20160 | storage.block-cache.shared                | null         |
| tikv | x.x.x.x:20160 | storage.block-cache.strict-capacity-limit | false        |
+------+---------------------+-------------------------------------------+--------------+

3、主机节点总内存是32G,这里storage.block-cache.capacity 采用默认的 45%, 是14.4G

4、 然后在 Grafana的 TiKV-Detail面板看到 两个集群的 Block Cache Size 使用都在 13.8G左右

5、但是集群Tikv的内存使用有“异常“的集群最大也是24.2G(24.2/32=75.6%)和 当前集群实际的主机内存最大88%,相差了 13% 大约4G


核心疑问

1、storage.block-cache.capacity的14.4(实际是13.8GB) 和 24GB (最大24.2G,最小22.5G)的差异来源
2、24GB的75.6% 和总内存的 88%的差异是差在哪里了?

你的意思是storage.block-cache.capacity 为13.8GB,但是tikv 进程占用了内存24GB?

13.8GB → 24.2GB:差在 RocksDB 非 block-cache 内存 + 读写请求执行内存 + Raft 相关内存。

24.2GB → 88%(≈28GB):差在 系统页缓存 PageCache、内核 slab、tcp 缓存、其他进程 / 系统开销。

Block Cache 仅占 TiKV 总内存的约 57%,剩余近一半内存消耗在 RocksDB 的 Write BufferCompaction 内存池系统 / 网络开销 上。

是的,top看到这个进程的RES就是24GB

对,大体说的话,是这样,但是具体都是哪些占用呢,分别占用多少呢

大体上是这样,但是两套集群Tikv几点配置一样, storage.block-cache.capacity ,但是实际主机的内存表现不一样,我想知道具体为何这套集群的内存占用率更高呢,高出来的具体是那些指标消耗的,以及消耗了多少

内存分布出现什么问题了吗?

有业务影响吗?

这部分可能是操作系统的pagecache占用吧

这个可能是RocksDB 的固有内存吧

目前业务没有收到影响,就是所有Tikv节点出现内存使用率告警,最高的已经接近90% ,所以需要分析问题所在,然后看怎么处理

分布在 81%89%之间 ,这个应该能算正常吧

dashborad里面的 RocksDB - kv/raft面板有memtable相关参数的占用情况吧,这些也是内存的一部分

参考 https://docs.pingcap.com/zh/tidb/stable/grafana-tikv-dashboard/

是混合部署吗?

不是呢,都是单节点

嗯嗯,最近在看这个

嗯昨天进行heap抓包分析,看到主要是 Index/Filter导致,具体为啥是index/filter导致还在研究中。 memtable 也占了,但是这个占得比例倒是很小