292: QueryExceededMemoryLimitNoDiskUseAllowed (error code 292)
MongoDBNe demek?
Bir sorgu veya aggregation aşaması, izin verilen bellek sınırını (varsayılan 100 MB) aştı ve diske yazmaya izin verilmediği için başarısız oldu. Genellikle sıralama (sort) veya gruplama (group) aşamalarında görülür.
Neden olur?
Index'siz büyük veri üzerinde bellekte sıralama, geniş $group/$sort aggregation aşamaları, çok büyük ara sonuç kümeleri, allowDiskUse:false ayarı.
Nasıl çözülür?
Aggregation'da allowDiskUse:true seçeneğini kullanarak diske taşmaya izin verin: db.koleksiyon.aggregate(pipeline, {allowDiskUse:true}). Sıralama yapılan alanlara index ekleyerek belleği düşürün. Pipeline'ı erken $match ile filtreleyip işlenen veriyi azaltın. Gerekiyorsa sonuçları sayfalayın. MongoDB 6.0+ sürümünde disk kullanımı çoğu durumda varsayılan açıktır.