使用 Logical Import Mode

本文档介绍如何编写 Logical Import Mode 的配置文件,如何进行性能调优等内容。

配置及使用

可以通过以下配置文件使用 Logical Import Mode 执行数据导入:

1. [lightning]
2. # 日志
3. level = "info"
4. file = "tidb-lightning.log"
5. max-size = 128 # MB
6. max-days = 28
7. max-backups = 14

9. # 启动之前检查集群是否满足最低需求。
10. check-requirements = true

12. [mydumper]
13. # 本地源数据目录或外部存储 URL
14. data-source-dir = "/data/my_database"

16. [tikv-importer]
17. # 导入模式配置,设为 tidb 即使用 Logical Import Mode
18. backend = "tidb"

20. # Logical Import Mode 插入重复数据时执行的操作。
21. # - replace:新数据替代已有数据
22. # - ignore:保留已有数据,忽略新数据
23. # - error:中止导入并报错
24. on-duplicate = "replace"

26. [tidb]
27. # 目标集群的信息。tidb-server 的地址,填一个即可。
28. host = "172.16.31.1"
29. port = 4000
30. user = "root"
31. # 设置连接 TiDB 的密码,可为明文或 Base64 编码。
32. password = ""
33. # tidb-lightning 引用了 TiDB 库,并生成产生一些日志。
34. # 设置 TiDB 库的日志等级。
35. log-level = "error"

TiDB Lightning 的完整配置文件可参考完整配置及命令行参数。

冲突数据检测

冲突数据,即两条或两条以上的记录存在主键或唯一键列数据重复的情况。当数据源中的记录存在冲突数据,将导致该表真实总行数和使用唯一索引查询的总行数不一致的情况。TiDB Lightning 的 Logical Import Mode 通过 on-duplicate 配置冲突数据检测的策略,TiDB Lightning 根据策略使用不同的 SQL 语句进行插入。

策略 冲突时默认行为 对应 SQL 语句
replace 新数据替代旧数据 REPLACE INTO …
ignore 保留旧数据,忽略新数据 INSERT IGNORE INTO …
error 中止导入 INSERT INTO …

性能调优

  • TiDB Lightning 的 Logical Import Mode 性能很大程度上取决于目标 TiDB 集群的写入性能,当遇到性能瓶颈时可参考 TiDB 相关性能优化文档。
  • 如果发现目标 TiDB 集群的的写入尚未达到瓶颈,可以考虑增加 Lightning 配置中 region-concurrency 的值。region-concurrency 默认值为 CPU 核数,其含义在 Physical Import Mode 和 Logical Import Mode 下有所不同,Logical Import Mode 的 region-concurrency 表示写入并发数。配置示例:

1. [lightning] 2. region-concurrency = 32 - 调整目标 TiDB 集群的 raftstore.apply-pool-size 和 raftstore.store-pool-size 参数也可能提升导入速度。