Loader 导入时主键冲突

我一会降低并发试试把,时间差应该没有,都用NTP同步过了

比如看 loader 的日志, 2019/09/25 09:24:07 在导入数据,2019/09/25 09:24:15 有一些网络包报错

2019/09/25 09:24:07 status.go:32: [info] [loader] finished_bytes = 130067644, total_bytes = GetAllRestoringFiles4261909137, progress = 3.05 % 2019/09/25 09:24:12 status.go:32: [info] [loader] finished_bytes = 130067644, total_bytes = GetAllRestoringFiles4261909137, progress = 3.05 % [mysql] 2019/09/25 09:24:15 packets.go:36: unexpected EOF [mysql] 2019/09/25 09:24:15 packets.go:36: unexpected EOF [mysql] 2019/09/25 09:24:15 packets.go:36: unexpected EOF

看 TiDB 的日志,2019/09/25 09:24:30.972 这个时间点 TiDB 发生了重启么,TiDB 有没有 OOM 等情况,监控是否有异常

[2019/09/25 09:24:30.972 +08:00] [INFO] [printer.go:41] [“Welcome to TiDB.”] [“Release Version”=v3.0.3] [“Git Commit Hash”=836982c617fbaa42d74616eb9ba9ed4cae46c46b] [“Git Branch”=HEAD] [“UTC Build Time”=“2019-08-30 02:42:42”] [GoVersion=“go version go1.12 linux/amd64”] [“Race Enabled”=false] [“Check Table Before Drop”=false] [“TiKV Min Version”=v3.0.0-60965b006877ca7234adaced7890d7b029ed1306]

看进程启动时间像是重启,这个可以降低内存使用率吗

机器内存资源有多大呢,从监控看 TiDB 占用的内存有多大

机器总内存7G,应该不是OOM

没有 TiDB 正常退出的日志,有没有 kill -9 过,TiDB 是如何部署的

Ansible部署的,没有过主动kill

可以查看系统 dmesg 等日志,以及 TiDB 的 stdout 和 stderr 有没有异常。正常 kill (非 kill -9) TiDB 是会有退出日志的。

好吧,是被OOM了,这个内存可以调小一点吗 这个是导致主键冲突的原因?

对,是的,这是 loader 里存在的一个问题。

TiDB OOM 重启 ——> loader 错误判断事务执行失败,重试 ——> 主键冲突

导入过程中控制 TiDB 内存目前做不到,当前 workaround 的方式可以出错后重新运行,或者尝试调低 loader 并发度

好的,我现在给并发数改成1了,先看看会不会有问题

目前问题解决了吗,上面是触发了 loader 一个内部不完善的实现,本质问题是下游 tidb 集群状态不可用,根除问题需要解决 tidb 集群负载或者 panic/oom 等问题

问题解决了,就是并发数太大导致tidb服务OOM了,然后loader重试没有找到对应位置,并发数降低就好了