Sorgu açıklama aracıyla sorgu yürütmeyi analiz etme

Yalnızca Cloud Firestore Enterprise sürümü için geçerlidir.

Bu sayfada, sorgu yürüttüğünüzde sorgu yürütme bilgilerinin nasıl alınacağı açıklanmaktadır.

Sorgu Açıklama'yı kullanma

Sorgularınızın nasıl yürütüldüğünü anlamak için Query Explain'i kullanabilirsiniz. Bu bölümde, sorgularınızı optimize etmek için kullanabileceğiniz ayrıntılar yer alır.

Google Cloud Console veya explain komutu aracılığıyla Query Explain'i kullanabilirsiniz.

Konsol

Sorgu düzenleyicide bir sorgu yürütün ve Açıklama sekmesini açın:

  1. Google Cloud Console'da Veritabanları sayfasına gidin.

    Veritabanları'na gidin

  2. Veritabanları listesinden MongoDB uyumlu bir Cloud Firestore veritabanı seçin. Google Cloud Console, söz konusu veritabanı için Firestore Gezgini'ni açar.
  3. Sorgu düzenleyiciye bir sorgu girin ve Çalıştır'ı tıklayın.
  4. Sorgu analizi çıkışını görüntülemek için Açıklama sekmesini tıklayın.

    Konsoldaki Sorguyu Açıklama sekmesi
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.find(...)

Ayrıca, örneğin explain() yöntemini de kullanabilirsiniz:

db.collection.find({QUERY}).explain()
Sınırlamalar
Aşağıdaki sınırlamaları ve farklılıkları göz önünde bulundurun:
  • Sorgu Açıklama, imleç döndüren komutları desteklemez. Örneğin, aşağıdaki komutu doğrudan çağırarak açıklama isteme desteklenmez:

    db.collection.aggregate(..., explain: true)
  • Sorgu Açıklama yalnızca find, aggregate, count ve distinct komutlarında desteklenir.

  • Query Explain'in Verbosity ve Comment seçenekleri MongoDB API üzerinden desteklenmez. Bu davranış, executionStats seçeneğiyle eşleşir. allPlansExecution ve queryPlanner seçenekleri sağlanırsa yoksayılır.

Analiz

Sorgu Açıklama'nın çıktısı iki ana bileşen içerir: Özet İstatistikler ve Yürütme Ağacı. Örnek olarak şu sorguyu ele alalım:

db.order.aggregate(
 [
   { "$match": { "user_id": 1234 } },
   { "$sort": { "date_placed": 1 } }
 ]
)

Özet İstatistikler

Açıklanan çıkışın üst kısmında, yürütme istatistiklerinin özeti yer alır. Bir sorgunun yüksek gecikmeye veya maliyete sahip olup olmadığını belirlemek için bu istatistikleri kullanın. Ayrıca, sorgunuzun bellek sınırlarına ne kadar yaklaştığını gösteren bellek istatistikleri de içerir.

Billing Metrics:
read units: 1

Execution Metrics:
request peak memory usage: 4.00 KiB (4,096 B)
results returned: 1

Yürütme Ağacı

Yürütme ağacı, sorgu yürütmeyi bir dizi düğüm olarak tanımlar. En alttaki düğümler (yaprak düğümler), sorgu yanıtı oluşturmak için ağaçta yukarı doğru ilerleyerek depolama katmanından veri alır.

Her yürütme düğümü hakkında ayrıntılı bilgi 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ılar için Sorgu yürütmeyi optimize etme başlıklı makaleyi inceleyin.

Aşağıda, yürütme ağacına dair bir örnek verilmiştir:

• Compute
|  $out_1: map_set($record_1, "__id__", $__id___1, "__key__", $__key___1, "__row_id__", $__row_id___1, "__$0__", $__$0___2)
|  is query result: true
|
|  Execution:
|   records returned: 1
|
└── • Compute
    |  $__$0___2: UNSET
    |
    |  Execution:
    |   records returned: 1
    |
    └── • Compute
        |  $__key___1: UNSET
        |  $__row_id___1: UNSET
        |
        |  Execution:
        |   records returned: 1
        |
        └── • Compute
            |  $__id___1: _id($record_1.__key__)
            |
            |  Execution:
            |   records returned: 1
            |
            └── • MajorSort
                |  fields: [$v_5 ASC]
                |  output: [$record_1]
                |
                |  Execution:
                |   records returned: 1
                |   peak memory usage: 4.00 KiB (4,096 B)
                |
                └── • Compute
                    |  $v_5: array_get($v_4, 0L)
                    |
                    |  Execution:
                    |   records returned: 1
                    |
                    └── • Compute
                        |  $v_4: sortPaths(array($record_1.date_placed), [date_placed ASC])
                        |
                        |  Execution:
                        |   records returned: 1
                        |
                        └── • Filter
                            |  expression: $eq($user_id_1, 1,234)
                            |
                            |  Execution:
                            |   records returned: 1
                            |
                            └── • TableScan
                                   source: **/my_collection
                                   order: STABLE
                                   properties: * - { __create_time__, __update_time__ }
                                   output record: $record_1
                                   output bindings: {$user_id_1=user_id}
                                   variables: [$record_1, $user_id_1]

                                   Execution:
                                    records returned: 1
                                    records scanned: 1

Sırada ne var?