Bu sayfada, bir sorgu yürüttüğünüzde sorgu yürütme bilgilerinin nasıl alınacağı açıklanmaktadır.
Sorgu Açıklaması'nı kullanma
Sorgularınızın nasıl yürütüldüğünü anlamak için Query Explain'i kullanabilirsiniz. Bu sayede, sorgularınızı optimize etmek için kullanabileceğiniz ayrıntılar sağlanır.
Query Explain'i Google Cloud Console veya explain komutu aracılığıyla kullanabilirsiniz.
Konsol
Sorgu Düzenleyici'de bir sorgu çalıştırın ve Açıklama sekmesini açın:
-
Google Cloud Console'da Veritabanları sayfasına gidin.
- Veritabanları listesinden bir Cloud Firestore veritabanı seçin. Google Cloud Console, ilgili veritabanı için Firestore Gezgini'ni açar.
- Sorgu düzenleyiciye bir sorgu girip Çalıştır'ı tıklayın.
-
Sorgu analizi çıkışını görüntülemek için Explanation (Açıklama) sekmesini tıklayın.
MongoDB API
MongoDB API'deki Query Explain, Mongo Shell ve Compass gibi araçlarda kullanabileceğiniz explain komutuyla desteklenir.
explain komutu; aggregate, find, distinct ve count komutlarıyla desteklenir. Örneğin:
db.collection.explain('executionStats').find(...)
explain() yöntemini de kullanabilirsiniz. Örneğin:
db.collection.find({QUERY}).explain('executionStats')Sınırlamalar
Aşağıdaki sınırlamaları ve farklılıkları göz önünde bulundurun:-
Query Explain, imleç döndüren komutları desteklemez. Örneğin, aşağıdaki komutu doğrudan çağırarak explain komutunu çalıştırmak desteklenmez:
db.collection.aggregate(..., explain: true)
Query Explain yalnızca
find,aggregate,count,distinct,update,deletevefindAndModifykomutlarında desteklenir.-
Sorgu Açıklama;
executionStats,allPlansExecutionvequeryPlannerayrıntı düzeylerini destekler.queryPlanner: Sorguyu yürütmeden yalnızca yürütme planını döndürür.executionStatsveallPlansExecution: Faturalandırma, bellek ve yürütme istatistikleriyle birlikte yürütme planını döndürür.
Herhangi bir ayrıntı düzeyi modu belirtilmezse kabuk varsayılan olarak
queryPlannerdeğerine ayarlanır. Yürütme istatistiklerinin tamamını görmek içinexecutionStatsveyaallPlansExecutionayrıntı düzeyi modunu belirtmeniz gerekir.
Analiz
Sorgu Açıklama'nın çıkışı iki ana bileşenden oluşur: Özet İstatistikler ve Yürütme Ağacı. Örnek olarak şu sorguyu ele alalım:
db.orders.aggregate(
[
{ "$match": { "user_id": 1234 } },
{ "$sort": { "date_placed": 1 } }
]
)
Özet İstatistikler
Açıklanan çıkışın üst kısmında yürütme istatistiklerinin bir özeti yer alır. Bir sorgunun gecikme süresinin veya maliyetinin yüksek olup olmadığını belirlemek için bu istatistikleri kullanın. Ayrıca sorgunuzun bellek sınırlarına ne kadar yakın olduğunu gösteren bellek istatistiklerini de içerir.
Execution:
results returned: 35
query id: 7e7b37ea1a259d79
request peak memory usage: 45.56 KiB (46,656 B)
data bytes read: 24.58 KiB (25,175 B)
entity row scanned: 265
Billing:
read units: 7
Yürütme Ağacı
Yürütme ağacı, sorgu yürütmeyi bir dizi düğüm olarak açıklar. En alttaki düğümler (yaprak düğümler), depolama katmanından veri alır. Bu veriler, sorgu yanıtı oluşturmak için ağaçta yukarı doğru ilerler.
Her bir yürütme düğümüyle ilgili ayrıntılar için Yürütme referansı başlıklı makaleyi inceleyin.
Sorgularınızı optimize etmek için bu bilgileri nasıl kullanacağınızla ilgili ayrıntılı bilgi için Sorgu yürütmeyi optimize etme başlıklı makaleyi inceleyin.
Aşağıda bir yürütme ağacı örneği verilmiştir:
Execution:
results returned: 35
query id: 7e7b37ea1a259d79
request peak memory usage: 45.56 KiB (46,656 B)
data bytes read: 24.58 KiB (25,175 B)
entity row scanned: 265
Billing:
read units: 7
Tree:
• Compute
| $out_1: map_set($record_1, "__id__", $__id___1, "__key__", unset)
| is query result: true
|
| Execution:
| records returned: 35
| latency: 204.87 ms (local 7.64 ms)
|
└── • Compute
| $__id___1: _id($__key___2)
|
| Execution:
| records returned: 35
| latency: 197.23 ms (local 2.04 ms)
|
└── • MajorSort
| fields: [$v_5 ASC]
| output: [$__key___2, $record_1]
|
| Execution:
| records returned: 35
| latency: 195.20 ms (local 28.42 ms)
| peak memory usage: 45.56 KiB (46,656 B)
|
└── • Compute
| $v_5: offset($v_4, 0L)
|
| Execution:
| records returned: 35
| latency: 166.78 ms (local 14.84 ms)
|
└── • Compute
| $v_4: sortPaths(array($date_placed_1), [date_placed ASC])
|
| Execution:
| records returned: 35
| latency: 151.94 ms (local 5.43 ms)
|
└── • TableScan
source: **/orders
order: STABLE
filter: $eq($user_id_1, 1,234)
output bindings: {$__key___2=row().__key__, $date_placed_1=row().date_placed, $record_1=row[* - { __create_time__, __update_time__ }](), $user_id_1=row().user_id}
output: [$__key___2, $date_placed_1, $record_1]
Execution:
records returned: 35
latency: 146.50 ms
data bytes returned: 3.25 KiB (3,325 B)
post-filtered rows: 230
records scanned: 265
data bytes read: 24.58 KiB (25,175 B)
Sırada ne var?
- Yürütme ağacı düğümleri hakkında bilgi edinmek için Sorgu yürütme referansı'na bakın.
- Sorgularınızı nasıl optimize edeceğinizi öğrenmek için Sorgu yürütmeyi optimize etme bölümünü inceleyin.