【求助帖】dumpling导出大表(3G以上)报如下错误,请查看正文,谢谢!!!

【 TiDB 使用环境】Poc
【 TiDB 版本】v4.0.9
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】dumpling迁移不了数据
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
[ERROR] [main.go:78] [“dump failed error stack info”] [error=“sql: SELECT * FROM bd_collection.game_record_dy_20250107 WHERE id>=7393494932581328408 and id<7393522033826154149 ORDER BY id: Error 9002 (HY000): TiKV server timeout”] [errorVerbose=“Error 9002 (HY000): TiKV server timeout\nsql: SELECT * FROM bd_collection.game_record_dy_20250107 WHERE id>=7393494932581328408 and id<7393522033826154149 ORDER BY id\ngithub.com/pingcap/tidb/dumpling/export.(*tableData).Start\n\tgithub.com/pingcap/tidb/dumpling/export/ir_impl.go:208\ngithub.com/pingcap/tidb/dumpling/export.(*Writer).WriteTableData.func1\n\tgithub.com/pingcap/tidb/dumpling/export/writer.go:210\ngithub.com/pingcap/tidb/br/pkg/utils.WithRetry.func1\n\tgithub.com/pingcap/tidb/br/pkg/utils/retry.go:37\ngithub.com/pingcap/tidb/br/pkg/utils.WithRetryV2[…]\n\tgithub.com/pingcap/tidb/br/pkg/utils/retry.go:55\ngithub.com/pingcap/tidb/br/pkg/utils.WithRetry\n\tgithub.com/pingcap/tidb/br/pkg/utils/retry.go:36\ngithub.com/pingcap/tidb/dumpling/export.(*Writer).WriteTableData\n\tgithub.com/pingcap/tidb/dumpling/export/writer.go:192\ngithub.com/pingcap/tidb/dumpling/export.(*Writer).handleTask\n\tgithub.com/pingcap/tidb/dumpling/export/writer.go:115\ngithub.com/pingcap/tidb/dumpling/export.(*Writer).run\n\tgithub.com/pingcap/tidb/dumpling/export/writer.go:93\ngithub.com/pingcap/tidb/dumpling/export.(*Dumper).startWriters.func4\n\tgithub.com/pingcap/tidb/dumpling/export/dump.go:378\ngolang.org/x/sync/errgroup.(*Group).Go.func1\n\tgolang.org/x/sync@v0.12.0/errgroup/errgroup.go:78\nruntime.goexit\n\truntime/asm_amd64.s:1700”]

dump failed: sql: SELECT * FROM bd_collection.game_record_dy_20250107 WHERE id>=7393494932581328408 and id<7393522033826154149 ORDER BY id: Error 9002 (HY000): TiKV server timeout

查看tidb集群tikv如下图:

导出语句如下图:
image

dumpling
-u
-p
-h
-P 4000
-o /path/to/output
-j 2 \ # 降低线程数
-r 200000 \ # 增加每批读取的行数,减少请求数
–tidb-sql-mode=“…”
–escape-backslash
试下

另外, 当前使用的 TiDB v4.0.9 是一个较旧的版本(发布于2020年)。新版本的 TiDB 和 Dumpling 在导出性能、内存管理和超时控制方面都有显著的优化。

看报错是tikv超时了,看看tikv日志是不是OOM了,另外这张表有多大,看id区间已经到7京了,不像是一个合理的值。

1 表太大 + ORDER BY id

dumpling 默认会:

ORDER BY 主键

然后 按范围扫描。

如果表:

数据量很大

region 很多

或 TiKV IO 慢

就容易触发

TiKV server timeout

2 个赞

先确认几个关键点

建议先看:

1 表是否有主键

执行

show create table bd_collection.game_record_dy_20250107;

如果:

PRIMARY KEY(id)

正常。

如果 没有主键
TiDB 会使用 _tidb_rowid

扫描会更慢。

2 表大小
SELECT
table_name,
table_rows,
data_length/1024/1024/1024 GB
FROM information_schema.tables
WHERE table_schema=‘bd_collection’
AND table_name=‘game_record_dy_20250107’;

如果是

几百GB

dumpling 默认参数很容易超时。

3 看 TiKV 是否慢

看监控:

TiDB Dashboard → Overview

重点看

KV Request Duration

Coprocessor Duration

如果出现

1s

就容易超时。
dumpling参数优化(最重要)

建议这样跑 dumpling:

dumpling
-u root
-p xxx
-h tidb_ip
-P 4000
-t 8
-r 200000
–consistency snapshot
–loglevel info
-o ./dump

2 个赞

减小 --chunk-size 降低单次查询压力,延长 --tidb-query-timeout 超时时间

三副本同时挂两个tikv,访问到问题数据,可能会出现TiKV server timeout报错,先把tikv恢复再用dumping导出数据。当前看-t 设置为2,后续可以考虑将-t设置为1再试试

TiKV导的时候出现问题,导出停止后又恢复了。这个tidb集群上没有业务,全部迁移了。现在迁数据遇到这个问题,谢谢

tikv日志报:send raft msg err

大佬,设置多少合适呢,谢谢

  1. 调整 GC 时间(重要!)

    -- 导出前延长 GC 时间,避免数据被清理
    SET GLOBAL tidb_gc_life_time = '24h';
    -- 导出完成后恢复
    SET GLOBAL tidb_gc_life_time = '10m';
    
  2. 降低并发数

    dumpling      --host 127.0.0.1      --port 4000      --user root      --threads 4      --rows 100000      --filesize 256MiB      --output /path/to/output
    
  3. 分片导出

    dumpling      --where "id >= 1 AND id < 1000000"      --output /path/to/output/part1
    

4.0.9版本,我查看了没有tidb_gc_life_time参数 :joy:

-r 200000 这个数设置太大,直接就断掉了 :joy:

可以直接升级到8.5.5的最新版本吗?

先解决 tikv 挂掉的问题,3 副本情况挂 2 个就不能用了,去看 tikv 的日志

tikv日志报:send raft msg err。5副本挂掉一个都不行

笨办法,把表拆分导出试试看

去掉order by 试试,另外tikv怎么状态不对

用跟库一样版本的dumpling导出就好