【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】V6.5.2
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
使用 Dumpling 导出-r参数参数不生效
导出名参数设置:
–filetype csv --sql " select ****
WHERE
b.accounts_time BETWEEN concat( date_add( curdate()- DAY ( curdate())+ 1, INTERVAL - 1 MONTH ), ’ 09:00:00’ )
AND concat( date_add( curdate(), INTERVAL - DAY ( curdate())+ 1 DAY ), ’ 08:59:59’ )
AND b.active = 1;
" -r 500 --output-filename-template=“bill_center_send_date '+%Y-%m-%d'.{{.Index}}”
指定500 行大小限制:
官方文档:
https://docs.pingcap.com/zh/tidb/v6.1/dumpling-overview
一共有两处解释:
-r 用于开启表内并发加速导出。默认值是 0,表示不开启。取值大于 0 表示开启,取值是 INT 类型。当数据源为 TiDB 时,设置 -r 参数大于 0 表示使用 TiDB region 信息划分区间,同时减少内存使用。具体取值不影响划分算法。对数据源为 MySQL 且表的主键是 INT 的场景,该参数也有表内并发效果。
-F 选项用于指定单个文件的最大大小,单位为 MiB,可接受类似 5GiB 或 8KB 的输入。如果你想使用 TiDB Lightning 将该文件加载到 TiDB 实例中,建议将 -F 选项的值保持在 256 MiB 或以下。
注意
如果导出的单表大小超过 10 GB,强烈建议使用 -r 和 -F 参数。
通过并发提高 Dumpling 的导出效率
默认情况下,导出的文件会存储到 ./export-<current local time> 目录下。常用选项如下:
-t用于指定导出的线程数。增加线程数会增加 Dumpling 并发度提高导出速度,但也会加大数据库内存消耗,因此不宜设置过大。-r选项用于指定单个文件的最大记录数,或者说,数据库中的行数。开启后 Dumpling 会开启表内并发,提高导出大表的速度。当上游为 TiDB 且版本为 v3.0 或更新版本时,设置-r参数大于 0 表示使用 TiDB region 信息划分表内并发,具体取值不影响划分算法。对上游为 MySQL 且表的主键是 int 的场景,该参数也有表内并发效果。
实验测试结果:
[2024/01/04 18:00:44.433 +08:00] [INFO] [collector.go:255] [“backup success summary”] [total-ranges=1] [ranges-succeed=1] [ranges-failed=0] [total-take=948.487739ms] [total-rows=1343] [total-kv-size=487.2kB] [average-speed=513.7kB/s]
[2024/01/04 18:00:44.434 +08:00] [INFO] [client.go:779] [“[pd] stop fetching the pending tso requests due to context canceled”] [dc-location=global]
[2024/01/04 18:00:44.434 +08:00] [INFO] [client.go:716] [“[pd] exit tso dispatcher”] [dc-location=global]
[2024/01/04 18:00:44.434 +08:00] [INFO] [main.go:81] [“dump data successfully, dumpling will exit now”]
导出1343 发现文件没有分割。
total 488
-rw-rw-r-- 1 tidb tidb 487197 Jan 4 18:00 bill_center_send_2024-01-04.000000000.csv
单个文件行数如下:
1344 “444433330189”
:set nu
老师讲的单个文件最大行数,-r -F文件大小,那个先到以那个为准。
请问怎么理解这里的-r 参数,如果对导出文件怎么限制导出文件的行数?


