【 TiDB 使用环境】生产环境 /测试/
【 TiDB 版本】 v5.4.3
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
大概60T数据,每次启动lightning跑了一阵子后都被系统OOM了, 内存是64G的机器,cpu逻辑核心是16,region-concurrency 之前是默认的,后来调到10,再到5。
这里有二个疑问:
- 看日志已经跑到sample source data阶段了,这表示是否已经开始在导入数据了? 还是依旧是检测备份文件阶段?另外排序的那个目录也只有一些很小的文件,这正常吗?
- lightning启动后断点续传文件检测到不在,但是又找不到创建新的? 是不是意味着数据导入其实还没开始?
现在的现象感觉是数据一直没导进去,pd监控上的数据量也一直没有增长,然后lightning的内存一直在增大,直到OOM。
【资源配置】
【附件:截图/日志/监控】
机器上就只跑了一个lightning,内存都是被lightning占用了。
有些单文件挺小的,dump的时候也切分了表最大256M。
初步判断 TiDB Lightning 在导入数据时遇到了内存不足的问题,导致进程被系统 OOM Killer 杀死。这种情况通常是由于数据量过大,导致 TiDB Lightning 在进行排序、合并等操作时需要占用大量内存,而机器的内存无法满足这些操作的需求,从而导致进程被 OOM Killer 杀死。
针对这种情况,您可以尝试以下几个方案:
- 调整 TiDB Lightning 的参数,以减少内存的占用。例如,可以尝试调整
sorter.memory-quota
参数,降低排序操作的内存占用。此外,您也可以尝试调整 tikv-importer.sorter.num-concurrent-worker
参数,降低并发排序的数量,从而减少内存的占用。
- 增加机器的内存。如果您的机器内存不足,可以考虑增加机器的内存,以满足 TiDB Lightning 进行数据导入时的内存需求。
- 将数据分批导入。如果您的数据量过大,可以考虑将数据分批导入,以减少单次导入时的内存占用。例如,可以将数据按照时间范围、表名等进行分批导入。
lightning必须跑在备份数据的机器上吧,可以找一些大内存的机器,但没法指定远程备份目录吧?
这二个参数怎么加入配置文件中呢,试了几种形式都说配置有误
memory-quota= “55G”
sorter.memory-quota= “55G”
还有这个 tikv-importer.sorter.num-concurrent-worker
怎么加进去
大鱼海棠
10
看着像是precheck都没过,OOM的图有吗,region-concurrency 默认是vc数量,应该占用不了这么多内存才对
还调整了其他参数吗
大鱼海棠
11
sort区空间够吗,这个日志打印的位置会预估data kvs和index kvs的整体大小
tidb-lightning.toml (1.4 KB)
这是整个配置文件,帮忙看看,
这是OOM日志:
sort区空间不太够,但是每次跑,都只是内存一直在涨,sort区有一些文件都很小啊,好像都还没开始用上sort区。
/dev/md0 131T 81T 44T 66% /data1
dump数据文件和sort区我都放在/data1了, 没有更大的磁盘了。
大鱼海棠
14
index-concurrency = 2
table-concurrency = 6
调整下试下,这台机器只部署了lightning吗,不知道这64G占用怎么来的,感觉不太合理,导出文件都拆分过了吗
只跑了lightning
这是dumpling导出的参数:
/root/tidb-toolkit-v5.4.2-linux-amd64/bin/dumpling -u xxx -p ‘xxx.com’ -P 3306 -h 10.117.17.57 --filetype sql --read-timeout=1h -t 16 -o /data1/tmp -r 200000 -F256MiB
换新版本的lightning导入试试,说不定碰到啥bug了
修改了上面那二个参数后,又跑了几个钟了, 为什么排序目录sorted-kv-dir 还这么小,感觉没有用起来,就内存一直涨,lightning日志也从check datafile, 到了Sample source data。
这是开始时的lignhting日志:
大鱼海棠
19
还没有开始导数据,应该是表太多了,看发的日志还在做precheck