257 TransactionTooLarge: TransactionTooLarge
MongoDBNe demek?
Çok belgeli bir transaction, izin verilen boyut/işlem sayısı sınırlarını aştı. Transaction içinde biriken değişiklikler (oplog girişi ya da bellek kullanımı) üst sınırı geçtiği için transaction reddedildi.
Neden olur?
Tek bir işlemde çok sayıda belge değiştirmek/eklemek, işlemin ürettiği toplam veriyi (ör. WiredTiger önbelleğinde tutulması gereken değişiklik hacmi ya da transactionLimitBytes gibi sunucu sınırları) aşırıya çıkardı. 4.2'den beri bir transaction birden fazla oplog girişine bölünebildiğinden 16 MB'lik oplog girişi sınırı tek başına belirleyici değildir. İşlemleri toplu veri taşıma/ETL için kullanmak bu sınırı kolayca zorlar.
Nasıl çözülür?
Transaction'ı daha küçük parçalara bölün; her partiyi ayrı bir transaction'da commit edin. Çok belgeli transaction'lar kısa ve küçük tutulmak üzere tasarlanmıştır; büyük toplu güncellemeleri transaction'sız (idempotent, parça parça) yapmayı ya da bulk write ile bölerek işlemeyi tercih edin. Tek transaction'da binlerce belge değiştirmekten kaçının.
Aynı motorda diğer kayıtlar
- 216 ElectionInProgressElectionInProgress
- 225 TransactionTooOldTransactionTooOld
- 246 SnapshotUnavailableSnapshotUnavailable
- 276 IndexBuildAbortedIndexBuildAborted
- 86 IndexKeySpecsConflictIndexKeySpecsConflict
- 166 CommandNotSupportedOnViewCommandNotSupportedOnView
- 168 InvalidPipelineOperatorInvalidPipelineOperator