[问题澄清]
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 的限制,还是有影响.
[参考案例]