257 TransactionTooLarge: TransactionTooLarge
MongoDB意味
マルチドキュメントトランザクションが許容されるサイズ/操作数の上限を超えた。トランザクションに蓄積された変更 (oplog エントリまたはメモリ使用量) が上限を超えたため、トランザクションは拒否された。
原因
単一のトランザクションで多数のドキュメントを変更/挿入したため、トランザクションが生成するデータの総量が大きくなりすぎた (例: WiredTiger キャッシュに保持すべき変更量、または transactionLimitBytes などのサーバーの上限)。4.2 以降、トランザクションは複数の oplog エントリに分割できるため、16 MB の oplog エントリ上限だけが決定的なわけではない。一括データ移行/ETL にトランザクションを使用すると容易にこの上限に達する。
対処方法
トランザクションを小さく分割し、各バッチを別々のトランザクションでコミットする。マルチドキュメントトランザクションは短く小さく使うよう設計されている。大規模な一括更新はトランザクションなしで (冪等に、チャンクごとに) 行うか、bulk write で分割することを優先する。単一のトランザクションで数千のドキュメントを変更することを避ける。
同じデータベースの他の項目
- 216 ElectionInProgressElectionInProgress
- 225 TransactionTooOldTransactionTooOld
- 246 SnapshotUnavailableSnapshotUnavailable
- 276 IndexBuildAbortedIndexBuildAborted
- 86 IndexKeySpecsConflictIndexKeySpecsConflict
- 166 CommandNotSupportedOnViewCommandNotSupportedOnView
- 168 InvalidPipelineOperatorInvalidPipelineOperator