Bu bölüm, MongoDB sorgu performans analizini tanıtıyor. SQL'in explain benzeri, MongoDB de sorgu ifadelerinin performansını analiz etmek için explain'i destekler.
Temel Kullanım
explain fonksiyonunu çağırarak analiz sonucunu elde edebilirsiniz
// find metodunun analiz sonucu
db.collection.find({}).explain();
// aggregate metodunun analiz sonucu
db.collection.explain().aggregate([]);
explain'in üç modu vardır:
- queryPlanner (varsayılan)
- executionStats
- allPlansExecution
Açıklama:
- queryPlanner kullanarak sadece tüm olası yürütme planlarını listeler, gerçek ifadeyi yürütmez ve zaten kazanmış olan winningPlan planını görüntüler.
- executionStats kullanarak sadece winningPlan planını yürütür ve sonucu çıktılar.
- allPlansExecution kullanarak tüm planları yürütür ve sonuçları çıktılar.
Farklı modların kullanımı
// executionStats modu, sadece parametreleri explain fonksiyonuna iletmek
db.collection.find({}).explain('executionStats');
// allPlansExecution modu
db.collection.find({}).explain('allPlansExecution');
explain içeriğinin açıklanması
queryPlanner İçeriği
Aşağıdaki içerik, explain tarafından varsayılan olarak döndürülen içeriktir, anahtar olmayan bilgileri yok sayar
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "test.orders",
"indexFilterSet" : false, // Anahtar metrik, index filtreleme verisi kullanılıp kullanılmadığı
"winningPlan" : {
"stage" : "COLLSCAN", // Anahtar metrik, stage aşama adı. Her aşamanın aşama özgü bilgileri vardır, örn., COLLSCAN tüm koleksiyon içeriğinin taranmasını temsil eder
"direction" : "forward"
},
"rejectedPlans" : [ ]
}
...
}
Aşama aşama tipleri aşağıdaki gibidir:
- COLLSCAN: Tam tablo taraması
- IXSCAN: İndeks taraması
- FETCH: İndekse dayalı belirli belgeleri alma
- SHARD_MERGE: Her shard tarafından döndürülen verilerin birleştirilmesi
- SORT: Bellekte sıralama yapılmasını gösterir
- LIMIT: İadelerin sayısını sınırlama
- SKIP: Kullanımı atla
- IDHACK: _id için sorgu
- SHARDING_FILTER: mongos üzerinden shard verilerini sorgulama
- COUNT: db.coll.explain().count() veya benzeri için sayım işlemleri
- COUNTSCAN: Sayım için bir indeksi kullanmadan dönen aşama
- COUNT_SCAN: Sayım için bir indeksi kullanan aşama
- SUBPLA: İndeks kullanılmayan $or sorguları için dönen aşama
- TEXT: Tam metin indeksleri kullanılarak sorgulama yapıldığında dönen aşama
- PROJECTION: İade edilen alanları sınırlandırmak için dönen aşama
executionStats İçeriği
Aşağıdaki içerik, executionStats modunda dönen içeriktir, anahtar olmayan bilgileri yok sayar
{
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 5, // İade edilen belge sayısı
"executionTimeMillis" : 0, // Yürütme süresi
"totalKeysExamined" : 0, // Kaç indeks tarandı
"totalDocsExamined" : 5, // Taranan belgelerin toplam sayısı
"executionStages" : {
"stage" : "COLLS CAN", // Aşama türü, COLLSCAN tüm tabloyu taradığını belirtir
"nReturned" : 5,
"executionTimeMillisEstimate" : 0,
"works" : 7,
"advanced" : 5,
"needTime" : 1,
"needYield" : 0,
"saveState" : 0,
"restoreState" : 0,
"isEOF" : 1,
"direction" : "forward",
"docsExamined" : 5
}
}
}
Sorgu Optimizasyon Fikirleri
- Mümkün olduğunca indeksleri kullanın
- Taranan belge sayısı ne kadar az olursa, o kadar iyi olur