Ошибка в TiDB: `java.sql.BatchUpdateExecption: количество операторов 5001 превышает ограничение транзакции`
Когда я использовал Sqoop для записи данных в TiDB партиями, я столкнулся со следующей ошибкой:
java.sql.BatchUpdateExecption:statement count 5001 exceeds the transaction limitation
Я настроил --batch
Вариант уже есть, но эта ошибка все-таки произошла. Как устранить эту ошибку?
1 ответ
В Sqoop, --batch
означает совершение 100 statement
s в каждой партии, но по умолчанию каждый 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, но это потребует больше памяти.