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

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 bilgiler, sorgularınızı optimize etmek için kullanabileceğiniz ayrıntılar sağlar.

Google Cloud Console üzerinden 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 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.

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.pipeline().collection('/users').sort(field("status").ascending()).limit(100)

Özet İstatistikler

Açıklanan çıkışın en üstünde, 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.

Execution:
 results returned: 2
 request peak memory usage: 20.25 KiB (20,736 B)
 data bytes read: 148 B
 entity row scanned: 2

Billing:
 read units: 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ü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ı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:

Tree:
• Compute
|  $out_1: map_set($record_1, "__name__", $__name___1, "__key__", unset)
|  is query result: true
|
|  Execution:
|   records returned: 2
|   latency: 5.96 ms (local <1 ms)
|
└── • Compute
    |  $__name___1: map_get($record_1, "__key__")
    |
    |  Execution:
    |   records returned: 2
    |   latency: 5.88 ms (local <1 ms)
    |
    └── • MajorSort
        |  fields: [$v_1 ASC]
        |  output: [$record_1]
        |  limit: 100
        |
        |  Execution:
        |   records returned: 2
        |   latency: 5.86 ms (local <1 ms)
        |   peak memory usage: 20.25 KiB (20,736 B)
        |
        └── • Compute
            |  $v_1: map_get($record_1, "status")
            |
            |  Execution:
            |   records returned: 2
            |   latency: 5.23 ms (local <1 ms)
            |
            └── • TableScan
                   source: /users
                   order: UNDEFINED
                   properties: *
                   row range: (-∞..+∞)
                   output record: $record_1
                   variables: [$record_1]

                   Execution:
                    records returned: 2
                    latency: 4.68 ms
                    records scanned: 2
                    data bytes read: 148 B

Sırada ne var?