257 TransactionTooLarge: TransactionTooLarge
MongoDBO que significa?
Uma transação multidocumento excedeu os limites permitidos de tamanho/quantidade de operações. A transação foi rejeitada porque as alterações acumuladas nela (entrada de oplog ou uso de memória) ultrapassaram o limite superior.
Por que acontece?
Modificar/inserir um grande número de documentos em uma única transação elevou demais o total de dados produzidos pela transação (por exemplo, o volume de alterações que precisa ser mantido no cache do WiredTiger, ou limites do servidor como transactionLimitBytes). Desde a 4.2, uma transação pode ser dividida em várias entradas de oplog, então o limite de 16 MB por entrada de oplog sozinho não é decisivo. Usar transações para migração de dados em massa/ETL atinge esse limite com facilidade.
Como resolver
Divida a transação em partes menores; faça commit de cada lote em uma transação separada. Transações multidocumento foram projetadas para ser curtas e pequenas; prefira fazer grandes atualizações em massa sem transações (de forma idempotente, bloco a bloco) ou dividi-las com bulk write. Evite modificar milhares de documentos em uma única transação.
Mais entradas deste banco
- 216 ElectionInProgressElectionInProgress
- 225 TransactionTooOldTransactionTooOld
- 246 SnapshotUnavailableSnapshotUnavailable
- 276 IndexBuildAbortedIndexBuildAborted
- 86 IndexKeySpecsConflictIndexKeySpecsConflict
- 166 CommandNotSupportedOnViewCommandNotSupportedOnView
- 168 InvalidPipelineOperatorInvalidPipelineOperator