drainer out of memory

【 TiDB 使用环境】生产环境
【 TiDB 版本】V3.0.9
【复现路径】ansible 增加 drainer 节点,启动时候有进程,但是无端口,
【遇到的问题:问题现象及影响】
drainer启动过程中内存暴涨,导致 oom 后 系统kill掉 drainer
下游是往本机目录中写文件,不是数据库
【资源配置】 16 核 32G 内存
【附件:截图/日志/监控】




2113390ee12d72069957191dcf8877b9_0

这个库是已经很久了吗? 很多的DDL 吗? 如果是的可能是已知的问题

是的,很久了,DDL操作很多,最近想升级到高版本,所以先备份同步数据,所以开启了 binlog,增加了 drainer 节点,结果还没启动完内存就耗尽了

你这个下游的binlog的消费对象是file,还是其它tidb或者MySQL?

好老的版本了…

3.0.x 小版本都到 20 了,估计修复了不少bug,可以考虑升级
最好升级到主线版本上,问题会更少一些

是 file

drainer 启动需要拉全量历史的ddl,你这个估计是历史的 ddl history 太多了。

这个有可能是大事务导致的,drainer 的代码里面对于大事务的归档应该是没有溢出到磁盘的机制,你可以保证在全备的基础上,手动编辑drainer的savepoint 文件里面的committs,然后重新启动drianer,跳过那个大事务

第一次启动drainer,起不来,savepoint都没有生成,可以手动写一个放上去,然后起来吗?

drainer 没有savepoint 文件?你这个是后续扩容上去的把,按理来说,不应该时刻都有大事务才对?

是的,后期加的,目前已经起来了(用 32GRAM+250GSWAP 耗时 10 多个小时),drainer 启动的时候会 load 历史的 ddl,所以需要内存很大,内存不够的情况下就 oom 后程序就被系统 kill 了.
同步数据目前是追不上的,延迟很大,swap 还是不能用

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