[FAQ] tidb 导入大量数据提示 8004 - Transaction is too large, size: xxx

[问题澄清]

tidb 导入大量数据提示 8004 - Transaction is too large, size: xxx

[原因分析]

由于分布式事务要做两阶段提交,并且底层还需要做 Raft 复制,如果一个事务非常大,会使得提交过程非常慢,并且会卡住下面的 Raft 复制流程。为了避免系统出现被卡住的情况,我们对事务的大小做了限制:

  • 单个事务包含的 SQL 语句不超过 5000 条(默认)

报错:ERROR 1105 (HY000): statement count 5001 exceeds the transaction limitation, autocommit = false

  • 单条 KV entry 不超过 6MB

Error 1118: entry too large, the max entry size is 6291456, the size of data is 8463778

  • KV entry 的总条数不超过 30w

transaction too large, len:300001

  • KV entry 的总大小不超过 100MB

8004 - Transaction is too large, size: 104857600

[解决方案]

1.优先建议将事务拆分的小一些,例如使用where条件或者limit限制

2.4.0 之后版本可以尝试开启大事务

修改参数之后重启 tidb-server

注意:对于 单 KV 6M 的限制,还是有影响.

[参考案例]

2 个赞