背景
某TiDB集群高TPS 2张表(一张表226亿,一张表21亿)有CDC同步(6号晚上在归档226亿表引起TiKV机器内存涨了5G),最近30天TiKV机器内存使用一直涨
某TiKV存储节点机器内存使用
分析
版本信息
TiDB集群:Cluster version: v5.1.4
CDC:Release Version: v5.1.4
TiKV机器配置为3.7T NVME磁盘
参数配置方面
- 每个TiKV存储节点block-cache都为12G(64G内存机器)
- 存储节点机器独立部署TiKV,TiKV节点自身内存使用率76%
- TiKV存储节点机器透明大页一直是关闭
cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
TiDB CDC同步表特点
-
流水类 短时间有高TPS写入,写多读少(高峰期insert 4~5w数据量/秒)
-
批量inset每次100~200条数据
-
6号CDC 写到下游数据变更行最高为4.2w左右,7号CDC迁移到高内存机器后写到下游数据变更行最高为7.8w
TiKV进程主要内存组成
主要为block_cache,但目前TiKV block_cache为12G,远远没有达到TiKV进程50G左右内存占用
Grafana监控CDC-TiKV中发现另外TiKV节点CDC相关 组件 有大部分内存消耗:
- process_resident_memory_bytes-tikv_engine_block_cache_size_bytes(每个TiKV节点有34G内存左右消耗),TiKV进程50G内存消耗有大部分内存是非block_cache部分消耗即TiKV CDC 组件
TiKV节点非block_cache部分内存消耗
- tikv_cdc_sink_memory_bytes(内存很小)
缓存old value的大小
- tikv_cdc_old_value_cache_bytes(内存很小)
缓存在tikv中等待下发的cdc change event大小
推测
TiKV机器内存一直涨问题排查推测由于TiKV CDC组件占用大部分内存导致,疑问是为啥TiKV CDC组件占用内存会一直涨,有无在线的方法能释放TiKV CDC组件内存
专栏 - TiCDC 架构和数据同步链路解析 | TiDB 社区 TiCDC 架构和数据同步链路解析
专栏 - TiKV主要内存结构和OOM排查总结 | TiDB 社区 TiKV主要内存结构和OOM排查总结
https://docs.pingcap.com/zh/tidb/v5.1/ticdc-overview TiCDC 简介