MongoDB 3.0 sürümünden başlayarak, sırayı
collection.aggregate(...).explain()
için
collection.explain().aggregate(...)
size istenen sonuçları verecektir (dokümantasyon burada ).
Eski sürümler> = 2.6 için, toplama işlem hattı işlemleri seçeneğini kullanmanız gerekecektir.explain
explain:true
db.collection.aggregate([
{ $project : { "Tags._id" : 1 }},
{ $unwind : "$Tags" },
{ $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}},
{ $group: {
_id : "$_id",
count: { $sum:1 }
}},
{$sort: {"count":-1}}
],
{
explain:true
}
)
Toplama Framework ile önemli bir husus bir dizin sadece bir boru hattı için ilk veri getirmek için kullanılabilecek olmasıdır (ör kullanımını $match
, $sort
, $geonear
bir boru hattının başında) yanı sıra daha sonraki $lookup
ve $graphLookup
evreleri. Veri işlemek için toplama boru hattına getirilen olmuştur (örn gibi aşamalardan geçerek kez $project
, $unwind
ve $group
) ileri manipülasyon bellek (eğer muhtemelen geçici dosyaları kullanıyor olacak allowDiskUse
opsiyon kümesidir).
Ardışık düzenleri optimize etme
Genel olarak, toplama işlem hatlarını şu şekilde optimize edebilirsiniz:
- İşlemeyi
$match
ilgili belgelerle sınırlamak için bir aşamayla bir boru hattının başlatılması.
- Başlangıç
$match
/ $sort
aşamaların verimli bir endeks ile desteklenmesini sağlamak .
- Filtreleme veri erken kullanarak
$match
, $limit
ve $skip
.
- Gereksiz aşamaları ve belge manipülasyonunu en aza indirmek (karmaşık toplama jimnastiği gerekliyse belki de şemanızı yeniden gözden geçirmek).
- MongoDB sunucunuzu yükselttiyseniz daha yeni toplama operatörlerinden yararlanın. Örneğin, MongoDB 3.4 , diziler, dizeler ve yüzlerle çalışma desteği dahil olmak üzere birçok yeni toplama aşaması ve ifade ekledi .
MongoDB sunucu sürümünüze bağlı olarak otomatik olarak gerçekleşen bir dizi Toplama Ardışık Düzeni Optimizasyonu da vardır. Örneğin, çıktı sonuçlarını etkilemeden yürütmeyi iyileştirmek için bitişik aşamalar birleştirilebilir ve / veya yeniden düzenlenebilir.
Sınırlamalar
MongoDB 3.4'te olduğu gibi, Toplama Çerçevesi explain
seçeneği, bir ardışık düzeneğin nasıl işlendiği hakkında bilgi sağlar, ancak executionStats
bir find()
sorgu moduyla aynı ayrıntı düzeyini desteklemez . İlk sorgu yürütmeyi optimize etmeye odaklandıysanız, eşdeğer find().explain()
sorguyu ayrıntıyla executionStats
veya allPlansExecution
ayrıntıyla gözden geçirmenin büyük olasılıkla yararlı olduğunu göreceksiniz .
MongoDB sorun izleyicisinde, / profil toplama işlem hatlarını optimize etmeye yardımcı olacak daha ayrıntılı yürütme istatistikleriyle ilgili olarak izlemek / oy vermek için birkaç ilgili özellik isteği vardır: