【 TiDB 使用环境】生产环境
【 TiDB 版本】7.1.0
【遇到的问题:问题现象及影响】
近期频繁出现tiflash、tidb组件的oom,需要调研一下ticdc组件的内存上限控制控制,防止出现oom导致大范围的故障。
调研进度:
1、查看中文官方文档,只找到per-table-memory-quota
限制 “单个表内存”?
2、查到github中 MaxMemoryPercentage
和PerTableMemoryQuota
参数,但是标注 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内存。这个时候从管理者来看还能加任务同步任务;但是作为一线运维来看是存在风险的。 最终还是期望能有整体内存限制的方法。
看github仓库描述max-memory-consumption
、max-memory-percentage
这俩参数不用了
看起来gc-tuner-memory-threshold
参数是触发GC的阈值。
设置gc-tuner-memory-threshold
应该有效
server.run() → server.prepare() → server.setMemoryLimit() → setMemoryLimit → gctuner.Tuning(conf.GcTunerMemoryThreshold)
在 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参数有效么
Kongdom
(Kongdom)
16
1 个赞
zxgaa
(Ti D Ber Ji W Bubwr)
18
我用的V6.1版本,各种参数都试了,不管用,最多可用用到350G内存
是的,这两个点应该可以间接限制内存使用,但没法直接限制server级别的内存使用。
lilin90
(Lilian Lee)
20
感谢发现和反馈这处中、英文档不一致的问题。已将中文 TiCDC Server 配置和英文 TiCDC Server Configurations 的 cdc server
配置文件说明小节更新为一致的内容。
1 个赞