如何限制TiCDC内存使用上限

【 TiDB 使用环境】生产环境
【 TiDB 版本】7.1.0

【遇到的问题:问题现象及影响】

近期频繁出现tiflash、tidb组件的oom,需要调研一下ticdc组件的内存上限控制控制,防止出现oom导致大范围的故障。

调研进度:
1、查看中文官方文档,只找到per-table-memory-quota 限制 “单个表内存”?
2、查到github中 MaxMemoryPercentagePerTableMemoryQuota 参数,但是标注 Deprecated: we don't use this field anymore. 这两个不在用了么?两个参数是什么意义?
https://github.com/pingcap/tiflow/blob/release-7.1/pkg/config/server_config.go
3、中文文档和英文文档的max-memory-percentage 不一样(中文没有这个参数,英文有),max-memory-percentage参数是否有效,文档以哪个为准?
https://docs.pingcap.com/tidb/stable/ticdc-server-config

在任务 Changefeed 可以设置 Capture Server 中内存配额的上限。对于超额使用部分,
会在运行中被 Go runtime 优先回收。默认值为 1073741824,即 1 GB。
memory-quota = 1073741824

sorter.max-memory-consumption用来设定cdc内存的总使用量
cdc可以看看这个cdc配置文档中对内存限制相关的参数

https://docs.pingcap.com/tidb/stable/ticdc-server-config

1 个赞

了解,除了这个,还有类似tiflash、tidb等组件的max_memory_usage_for_all_queries整体的上限限制么?

根据现实使用情况来讲,设置每个Changefeed 的内存上限有2个小问题:
1、只能限制单个任务内存,需要调整全部的任务内存要全部更新一遍。
2、如果机器内存32G,按照使用80%来讲最多每个机器配置25.6个任务,但是实际情况可能只用到5 ~6G内存。这个时候从管理者来看还能加任务同步任务;但是作为一线运维来看是存在风险的。 最终还是期望能有整体内存限制的方法。

为何英文版本会有这个配置,中文的文档没有
https://docs.pingcap.com/zh/tidb/stable/ticdc-server-config

看github仓库描述max-memory-consumptionmax-memory-percentage 这俩参数不用了

看起来gc-tuner-memory-threshold 参数是触发GC的阈值。
设置gc-tuner-memory-threshold 应该有效

server.run()server.prepare() server.setMemoryLimit()setMemoryLimitgctuner.Tuning(conf.GcTunerMemoryThreshold)

好像不用了,但是代码中还是有这个参数。

https://github.com/pingcap/tiflow/blob/684d117c67a80cf4ef1d940aa02e90aa084c0114/pkg/config/sorter.go#L23C2-L23C2

6.5 用了可以生效,高版本没测过

在 TiKV 侧有 cdc component 组件用于跟踪 tikv 的变化和向下游 ticdc 发送数据,可通过参数 cdc.old-value-cache-memory-quota 控制 old value 缓存的大小,cdc.sink-memory-quota 控制缓存在 tikv 中等待下发的 cdc change event 所占的内存大小。

确认过了这个参数不生效,文档后续会删除

大佬,gc-tuner-memory-threshold参数有效么

文档上没有搜索到,那就是无效的

好的,我看它初始化时候赋值的常量,应该是无效的。

好像7版本这个参数无效了

你说的是这里么?
https://docs.pingcap.com/zh/tidb/stable/tikv-configuration-file#cdc
https://docs.pingcap.com/zh/tidb/stable/ticdc-changefeed-config#ticdc-changefeed-配置文件说明

1 个赞

请教一下,有没有说从哪个版本开始不生效的?

我用的V6.1版本,各种参数都试了,不管用,最多可用用到350G内存

是的,这两个点应该可以间接限制内存使用,但没法直接限制server级别的内存使用。

感谢发现和反馈这处中、英文档不一致的问题。已将中文 TiCDC Server 配置和英文 TiCDC Server Configurationscdc server 配置文件说明小节更新为一致的内容。

1 个赞