Ошибка в TiDB: `java.sql.BatchUpdateExecption: количество операторов 5001 превышает ограничение транзакции`

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

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

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

1 ответ

В Sqoop, --batch означает совершение 100 statements в каждой партии, но по умолчанию каждый 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, но это потребует больше памяти.

Другие вопросы по тегам