Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Sorgu Yürütme Ölçümlerini kullanarak Azure Cosmos DB'de SQL sorgu performansının profilinin nasıl yapılacağı açıklanmaktadır. İstek için tüm fiziksel bölümlerde toplanan toplu ölçümler, her fiziksel bölüm için bir ölçüm listesi ve toplam istek ücreti içerir. Bu ölçümler Sorgu Performansını Ayarlama makalesinde daha ayrıntılı olarak belgelenmiştir.
Sorgu ölçümlerini etkinleştirme
Sorgu ölçümlerini almak için aşağıdaki gibi sorgu parametrelerinizde bayrağını populate_query_metrics olarak ayarlamanız True gerekir. Dizin ölçümlerini etkinleştirmenin yanı sıra hata ayıklama amacıyla da ilginizi çekebilir ve bayrağını populate_query_metricsTrueolarak ayarlayarak etkinleştirebilirsiniz:
results = container.query_items(
query=queryText,
enable_cross_partition_query=True,
populate_index_metrics=True,
populate_query_metrics=True
)
Sorgu yürütme ölçümlerini alma
Python SDK'sında, sorgu yürütme ölçümlerini almak için kapsayıcı istemcisinden üst bilgi değerlerini okuyabilirsiniz x-ms-documentdb-query-metrics . Aşağıdaki kod parçacığında sorgu yürütme ölçümlerinin nasıl okunduğu gösterilmektedir:
results = container.query_items(
query=queryText,
enable_cross_partition_query=True,
populate_query_metrics=True
)
items = [item for item in results]
'''
Please note that the last_response_headers are available only after the first iteration of the results as the query execution starts only when result iteration begins
'''
print("Query Metrics: ",container.client_connection.last_response_headers['x-ms-documentdb-query-metrics'])
Sonuç size sorgu yürütmeyle ilgili bilgileri aşağıda gösterildiği gibi verir:
totalExecutionTimeInMs=0.27;
queryCompileTimeInMs=0.04;
queryLogicalPlanBuildTimeInMs=0.00;
queryPhysicalPlanBuildTimeInMs=0.02;
queryOptimizationTimeInMs=0.00;
VMExecutionTimeInMs=0.02;
indexLookupTimeInMs=0.00;
instructionCount=17;
documentLoadTimeInMs=0.01;
systemFunctionExecuteTimeInMs=0.00;
userFunctionExecuteTimeInMs=0.00;
retrievedDocumentCount=3;
retrievedDocumentSize=1005;
outputDocumentCount=3;
outputDocumentSize=1056;
writeOutputTimeInMs=0.00;
indexUtilizationRatio=1.00
Yukarıdaki sonuçlar, sorgunuzun ne kadar verimli olduğuna ilişkin içgörüler sağlayabilir. Sorgunun yürütülmesinin ne kadar sürdüğünü görmek için totalExecutionTimeInMs bölümüne bakabilirsiniz. indexUtilizationRatio, sorgunuzun dizini ne kadar iyi kullandığınıza ilişkin içgörüler sağlayabilir. Ölçümleri ayrıntılı olarak anlamak için Sorgu Yürütme Ölçümleri makalesine bakın.
Sorgu isteği ücretini alma
Okuma x-ms-request-charge değeriyle tüketilen Toplam istek Birimlerini (RU) yakalayabilirsiniz. İstek ücreti değerini almak için açıkça herhangi bir parametre ayarlamanız gerekmez. Aşağıdaki örnekte, bir sorgunun her devamı için istek ücretinin nasıl alınması gösterilmektedir:
items = [item for item in results]
print("Request Units consumed: ",container.client_connection.last_response_headers['x-ms-request-charge'])
Dizin kullanımını alma
Dizin kullanımına bakmak yavaş sorgularda hata ayıklamanıza yardımcı olabilir. İyi bir dizin kullanım puanı 1'e yakın olmalıdır. Dizini kullanamayan sorgular, sonuç kümesini döndürmeden önce kapsayıcıdaki tüm belgelerin tam taramasına neden olur.
Tarama sorgusu örneği aşağıda verilmişti:
SELECT VALUE c.description
FROM c
WHERE UPPER(c.description) = "BABYFOOD, DESSERT, FRUIT DESSERT, WITHOUT ASCORBIC ACID, JUNIOR"
Bu sorgunun filtresi, dizinden sunulmayan UPPER sistem işlevini kullanır. Büyük bir koleksiyonda bu sorgunun yürütülmesi, ilk devam için aşağıdaki sorgu ölçümlerini üretti:
QueryMetrics
Retrieved Document Count : 60,951
Retrieved Document Size : 399,998,938 bytes
Output Document Count : 7
Output Document Size : 510 bytes
Index Utilization : 0.00 %
Total Query Execution Time : 4,500.34 milliseconds
Query Preparation Time : 0.2 milliseconds
Index Lookup Time : 0.01 milliseconds
Document Load Time : 4,177.66 milliseconds
Runtime Execution Time : 407.9 milliseconds
Document Write Time : 0.01 milliseconds
Sorgu ölçümleri çıkışından aşağıdaki değerlere dikkat edin:
Retrieved Document Count : 60,951
Retrieved Document Size : 399,998,938 bytes
Bu sorgu, toplam 399.998.938 bayt olan 60.951 belge yükledi. Bu kadar bayt yüklenmesi yüksek maliyet veya istek birimi ücretine neden olur. Sorgunun yürütülmesi de uzun sürer ve bu işlem harcanan toplam süre özelliğiyle nettir:
Total Query Execution Time : 4,500.34 milliseconds
Bu, sorgunun yürütülmesinin 4,5 saniye sürdüğü anlamına gelir (ve bu sadece bir devam aşamasıydı).
Bu örnek sorguyu iyileştirmek için filtrede UPPER kullanmaktan kaçının. Bunun yerine, belgeler oluşturulduğunda veya güncelleştirildiğinde, değerlerin c.description tüm büyük harflerle eklenmesi gerekir. Sorgu şu hale gelir:
SELECT VALUE c.description
FROM c
WHERE c.description = "BABYFOOD, DESSERT, FRUIT DESSERT, WITHOUT ASCORBIC ACID, JUNIOR"
Bu sorgu artık dizinden sunulabiliyor. Alternatif olarak, sistem işlevlerinin sonuçlarını veya aksi takdirde tam tarama gerektirecek karmaşık hesaplamaları dizine almak için hesaplanan özellikleri kullanabilirsiniz.
tr-TR: Olası dizin önerilerini görmek ve hangi dizinlerin kullanıldığını kontrol etmek için populate_index_metrics parametresini True olarak ayarlamanız gerekir ve ardından kapsayıcı istemcisinden x-ms-documentdb-index-utilization başlık değerlerini okuyabilirsiniz. Aşağıdaki kod parçacığında dizin kullanım ölçümlerinin nasıl okunduğu gösterilmektedir:
results = container.query_items(
query=queryText,
enable_cross_partition_query=True,
populate_index_metrics = True
)
items = [item for item in results]
print("Index Utilization Info: ",container.client_connection.last_response_headers['x-ms-cosmos-index-utilization'])
Sorgu performansını ayarlama hakkında daha fazla bilgi edinmek için Sorgu Performansını Ayarlama makalesine bakın.