TiDB中的错误:`java.sql.BatchUpdateExecption:语句计数5001超出了事务限制`

时间:2018-07-06 07:31:21

标签: sqoop distributed-database tidb

当我使用Sqoop将数据批量写入TiDB时,遇到了以下错误:

java.sql.BatchUpdateExecption:statement count 5001 exceeds the transaction limitation

我已经配置了--batch选项,但是仍然发生此错误。如何解决此错误?

1 个答案:

答案 0 :(得分:0)

在Sqoop中,--batch表示每批提交100个statement,但是默认情况下每个statement包含100条SQL语句。因此,100 * 100 = 10000条SQL语句,超过5000条,这是单个TiDB事务中允许的最大语句数。

两种解决方案:

  • 添加-Dsqoop.export.records.per.statement=10选项,如下所示:

    sqoop export \
        -Dsqoop.export.records.per.statement=10 \
        --connect jdbc:mysql://mysql.example.com/sqoop \
        --username sqoop ${user} \
        --password ${passwd} \
        --table ${tab_name} \
        --export-dir ${dir} \
        --batch
    
  • 您还可以在单​​个TiDB事务中增加有限数量的语句,但这会消耗更多的内存。