Sorgu Açıklaması'nı kullanarak sorgu performansını anlama

Query Explain, Cloud Firestore sorgularını şuraya göndermenize olanak tanır: arka uç sorgu yürütme ve arka uç sorgu yürütmeyle ilgili ayrıntılı performans istatistiklerini alma karşılığında. Birçok dilde EXPLAIN [ANALYZE] işlemi gibi çalışır veritabanı sistemleri.

Sorgu Explain istekleri, Firestore sunucusu istemci kitaplıkları kullanılarak gönderilebilir.

Sorgu Açıklama sonuçları, sorgularınızın performansını anlamanıza yardımcı olur. çalıştırılarak, verimsizlikleri ve olası sunucu tarafının konumunu göz önünde bulundurmanız gerekir.

Sorgu Açıklaması:

  • Sorgunuzu ayarlayabilmeniz için sorgu planlama aşamasıyla ilgili analizler sağlar ve verimliliği artırır.
  • Analiz seçeneğini kullanarak, maliyet ve performansınızı anlamanıza sorgu başına esasına göredir ve farklı sorgularda hızlı iterasyonlar kullanımlarını optimize etmek için kullanabilirsiniz.
ziyaret edin.

Sorgu Açıklama seçeneklerini anlama: varsayılan ve analiz etme

Sorgu Açıklama işlemleri, default (varsayılan) seçeneği kullanılarak veya analiz seçeneğini de kullanabilirsiniz.

Varsayılan seçenek kullanıldığında, Query Explain, sorguyu planlar ancak atlar. destekleyici materyalleri inceleyeceksiniz. Bu işlem, planlayıcı aşama bilgilerini döndürür. Şunları yapabilirsiniz: bunu, bir sorgunun gerekli dizinlere sahip olup olmadığını kontrol etmek ve hangi dizinler kullanılır. Bu, örneğin belirli bir anahtar kelimenin birçok farklı alanla kesişmek zorunda kalmadan bileşik bir dizin dizine ekler.

Sorgu, analiz seçeneği sayesinde hem planları hem de emin olun. Bu, daha önce bahsedilen tüm planlayıcı bilgilerini istatistiklerinden birini seçin. Bu, sorguya ait sistem düzeyindeki analizlerle birlikte sorgunun bilgilerini birkaç adım var. Bu aracı, çeşitli sorguları ve dizinleri test etmek için yapılandırmaları ve gecikmelerini optimize etmek için kullanır.

Query Explain'in maliyeti nedir?

Query Explain'i varsayılan seçenekle kullandığınızda dizine ekleme veya okuma işlemi yapılmaz. emin olun. Sorgunun karmaşıklığından bağımsız olarak bir okuma işlemi ücretlendirilir.

Query Explain'i analiz seçeneği, dizine ekleme ve okuma işlemleriyle birlikte kullandığınızda gerçekleştirilir, bu nedenle sorgu için her zamanki gibi ücretlendirilirsiniz. Ek ödeme aracı için alınan normal ücret, yalnızca analiz işlemi için alınan yürütüldü.

Varsayılan seçenekle "Sorgu Açıklaması"nı kullanın

Varsayılan seçenek isteği göndermek için istemci kitaplıklarını kullanabilirsiniz.

İsteklerin IAM ile doğrulandığında, aynı izin verdiğinden emin olun. Diğer kimlik doğrulama teknikleri: Firebase Authentication yok sayılır. Daha fazla bilgi edinmek için Sunucu istemci kitaplıkları için IAM.

Java (Yönetici)

Query q = db.collection("col").whereGreaterThan("a", 1);
ExplainOptions options = ExplainOptions.builder().build();

ExplainResults<QuerySnapshot> explainResults = q.explain(options).get();
ExplainMetrics metrics = explainResults.getMetrics();
PlanSummary planSummary = metrics.getPlanSummary();

    
Düğüm (Yönetici)

const q = db.collection('col').where('country', '=', 'USA');
const options = { analyze : 'false' };

const explainResults = await q.explain(options);

const metrics = explainResults.metrics;
const plan = metrics.planSummary;

    

Yanıtın tam biçimi, yürütme ortamına bağlıdır. Döndürülen sonuçlar JSON'a dönüştürülebilir. Örneğin:

{
    "indexes_used": [
        {"query_scope": "Collection", "properties": "(category ASC, __name__ ASC)"},
        {"query_scope": "Collection", "properties": "(country ASC, __name__ ASC)"},
    ]
}

Daha fazla bilgi için Sorgu Açıklaması rapor referansı bölümüne bakın.

Analiz seçeneğiyle Sorgu Açıklaması'nı kullanma

Analiz seçeneği isteği göndermek için istemci kitaplıklarını kullanabilirsiniz.

İsteklerin IAM ile doğrulandığında, aynı izin verdiğinden emin olun. Diğer kimlik doğrulama teknikleri: Firebase Authentication yok sayılır. Daha fazla bilgi için Sunucu istemci kitaplıkları için IAM.

Java (Yönetici)

Query q = db.collection("col").whereGreaterThan("a", 1);

ExplainOptions options = ExplainOptions.builder().setAnalyze(true).build();

ExplainResults<QuerySnapshot> explainResults = q.explain(options).get();

ExplainMetrics metrics = explainResults.getMetrics();
PlanSummary planSummary = metrics.getPlanSummary();
List<Map<String, Object>> indexesUsed = planSummary.getIndexesUsed();
ExecutionStats stats = metrics.getExecutionStats();

    
Düğüm (Yönetici)

const q = db.collection('col').where('country', '=', 'USA');

const options = { analyze : 'true' };

const explainResults = await q.explain(options);

const metrics = explainResults.metrics;
const plan = metrics.planSummary;
const indexesUsed = plan.indexesUsed;
const stats = metrics.executionStats;

    

Aşağıdaki örnekte, planInfo öğesine ek olarak döndürülen stats nesnesi gösterilmektedir. Yanıtın tam biçimi, yürütme ortamına bağlıdır. İlgili içeriği oluşturmak için kullanılan örnek yanıt JSON biçimindedir.

{
    "resultsReturned": "5",
    "executionDuration": "0.100718s",
    "readOperations": "5",
    "debugStats": {
               "index_entries_scanned": "95000",
               "documents_scanned": "5"
               "billing_details": {
                     "documents_billable": "5",
                     "index_entries_billable": "0",
                     "small_ops": "0",
                     "min_query_cost": "0",
               }
    }

}

Daha fazla bilgi için Sorgu Açıklaması rapor referansı bölümüne bakın.

Sonuçları yorumlama ve düzenlemeler yapma

Filmleri türe ve boyuta göre sorguladığımız üretildiği ülke.

Örnek olarak, bu SQL sorgusunun eşdeğerini varsayın.

SELECT *
FROM /movies
WHERE category = 'Romantic' AND country = 'USA';

"Analiz et" seçeneğini kullanırsak döndürülen metrikler, (category ASC, __name__ ASC) ve (country ASC, __name__ ASC). 16.500 dizin girişini tarar ancak yalnızca 1200 doküman.

// Output query planning info
{
    "indexes_used": [
        {"query_scope": "Collection", "properties": "(category ASC, __name__ ASC)"},
        {"query_scope": "Collection", "properties": "(country ASC, __name__ ASC)"},
    ]
}

// Output query status
{
    "resultsReturned": "1200",
    "executionDuration": "0.118882s",
    "readOperations": "1200",
    "debugStats": {
               "index_entries_scanned": "16500",
               "documents_scanned": "1200"
               "billing_details": {
                     "documents_billable": "1200",
                     "index_entries_billable": "0",
                     "small_ops": "0",
                     "min_query_cost": "0",
               }
    }
}

Sorgu yürütme performansını optimize etmek için bir tam kapsamlı birleşik dizin (category ASC, country ASC, __name__ ASC).

Sorguyu analiz seçeneğiyle tekrar çalıştırdığımızda, Bu sorgu için yeni oluşturulmuş dizin seçilir ve sorgu çok daha hızlı çalışır. ve daha verimli şekilde.

// Output query planning info
{
    "indexes_used": [
        {"query_scope": "Collection", "properties": "(category ASC, country ASC,  __name__ ASC)"}
    ]
}

// Output query stats
{
    "resultsReturned": "1200",
    "executionDuration": "0.026139s",
    "readOperations": "1200",
    "debugStats": {
               "index_entries_scanned": "1200",
               "documents_scanned": "1200"
               "billing_details": {
                     "documents_billable": "1200",
                     "index_entries_billable": "0",
                     "small_ops": "0",
                     "min_query_cost": "0",
               }
    }
}