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, $geonearbir boru hattının başında) yanı sıra daha sonraki $lookupve $graphLookupevreleri. Veri işlemek için toplama boru hattına getirilen olmuştur (örn gibi aşamalardan geçerek kez $project, $unwindve $group) ileri manipülasyon bellek (eğer muhtemelen geçici dosyaları kullanıyor olacak allowDiskUseopsiyon kümesidir).
Ardışık düzenleri optimize etme
Genel olarak, toplama işlem hatlarını şu şekilde optimize edebilirsiniz:
- İşlemeyi
$matchilgili belgelerle sınırlamak için bir aşamayla bir boru hattının başlatılması.
- Başlangıç
$match/ $sortaşamaların verimli bir endeks ile desteklenmesini sağlamak .
- Filtreleme veri erken kullanarak
$match, $limitve $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 explainseçeneği, bir ardışık düzeneğin nasıl işlendiği hakkında bilgi sağlar, ancak executionStatsbir 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 executionStatsveya allPlansExecutionayrı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: