Ошибка в TiDB: `java.sql.BatchUpdateExecption: количество операторов 5001 превышает ограничение транзакции` - PullRequest
0 голосов
/ 06 июля 2018

Когда я использовал Sqoop для записи данных в TiDB в пакетном режиме, я столкнулся со следующей ошибкой:

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

Я уже настроил параметр --batch, но эта ошибка все еще возникала.Как устранить эту ошибку?

1 Ответ

0 голосов
/ 06 июля 2018

В 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, но это потребует больше памяти.

...