257 TransactionTooLarge: TransactionTooLarge
MongoDBЧто это значит?
Многодокументная транзакция превысила допустимые лимиты размера/числа операций. Транзакция отклонена, так как накопленные в ней изменения (запись oplog или использование памяти) превысили верхний лимит.
Почему возникает?
Изменение/вставка большого числа документов в одной транзакции слишком увеличили общий объём данных, порождаемых транзакцией (например, объём изменений, который нужно держать в кеше WiredTiger, или серверные лимиты, такие как transactionLimitBytes). Начиная с 4.2 транзакция может разбиваться на несколько записей oplog, поэтому лимит записи oplog в 16 MB сам по себе не решающий. Использование транзакций для массовой миграции данных/ETL легко упирается в этот лимит.
Как исправить
Разбейте транзакцию на меньшие части; фиксируйте каждый пакет в отдельной транзакции. Многодокументные транзакции рассчитаны на краткость и малый размер; крупные массовые обновления предпочтительно выполнять без транзакций (идемпотентно, по частям) или разбивать с помощью bulk write. Избегайте изменения тысяч документов в одной транзакции.
Ещё по этой СУБД
- 216 ElectionInProgressElectionInProgress
- 225 TransactionTooOldTransactionTooOld
- 246 SnapshotUnavailableSnapshotUnavailable
- 276 IndexBuildAbortedIndexBuildAborted
- 86 IndexKeySpecsConflictIndexKeySpecsConflict
- 166 CommandNotSupportedOnViewCommandNotSupportedOnView
- 168 InvalidPipelineOperatorInvalidPipelineOperator