Azure Cosmos DB'de ölçümleri dizinleme
UYGULANANLAR: NoSQL
Azure Cosmos DB, hem kullanılan dizinlenmiş yolları hem de önerilen dizine alınmış yolları göstermek için dizinleme ölçümleri sağlar. Özellikle dizin oluşturma ilkesini nasıl değiştireceğinizden emin olmadığınız durumlarda sorgu performansını iyileştirmek için dizin oluşturma ölçümlerini kullanabilirsiniz.
Desteklenen SDK sürümleri
Dizin oluşturma ölçümleri aşağıdaki SDK sürümlerinde desteklenir: | SDK | Desteklenen sürümler | | --- | --- | | .NET SDK v3 | >= 3.21.0 | | Java SDK v4 | >= 4.19.0 | | Python SDK'sı | >= 4.6.0 |
Dizin oluşturma ölçümlerini etkinleştirme
özelliğini true
olarak ayarlayarak PopulateIndexMetrics
sorgu için dizin ölçümlerini etkinleştirebilirsiniz. Belirtilmediğinde, PopulateIndexMetrics
varsayılan olarak olarak false
gösterilir. Yalnızca sorgu performansı sorunlarını gidermek için dizin ölçümlerini etkinleştirmenizi öneririz. Sorgularınız ve dizin oluşturma ilkeniz aynı kaldığı sürece dizin ölçümlerinin değişme olasılığı düşüktür. Bunun yerine, tanılama günlüklerini kullanarak sorgu RU ücretlerini ve gecikme süresini izleyerek pahalı sorguları tanımlamanızı öneririz.
string sqlQueryText = "SELECT TOP 10 c.id FROM c WHERE c.Item = 'value1234' AND c.Price > 2";
QueryDefinition query = new QueryDefinition(sqlQueryText);
FeedIterator<Item> resultSetIterator = container.GetItemQueryIterator<Item>(
query, requestOptions: new QueryRequestOptions
{
PopulateIndexMetrics = true
});
FeedResponse<Item> response = null;
while (resultSetIterator.HasMoreResults)
{
response = await resultSetIterator.ReadNextAsync();
Console.WriteLine(response.IndexMetrics);
}
Örnek çıkış
Bu örnek sorguda, kullanılan yolları /Item/?
ve /Price/?
olası bileşik dizinlerini (/Item ASC, /Price ASC)
gözlemleyeceğiz.
Index Utilization Information
Utilized Single Indexes
Index Spec: /Item/?
Index Impact Score: High
---
Index Spec: /Price/?
Index Impact Score: High
---
Potential Single Indexes
Utilized Composite Indexes
Potential Composite Indexes
Index Spec: /Item ASC, /Price ASC
Index Impact Score: High
---
Kullanılan dizinli yollar
Kullanılan tek dizinler ve kullanılan bileşik dizinler sırasıyla sorgunun kullandığı eklenen yolları ve bileşik dizinleri gösterir. Sorgular, birden çok dizinli yolun yanı sıra eklenen yollar ile bileşik dizinlerin bir karışımını kullanabilir. Dizine alınmış bir yol kullanıldı olarak listelenmiyorsa, dizine alınan yolun kaldırılması sorgunun performansını etkilemez.
Kullanılan dizine alınmış yolların listesini, sorgunun bu yolları kullandığını gösteren bir kanıt olarak düşünün. Yeni bir dizinli yolun sorgu performansını geliştirip geliştirmediğinden emin değilseniz, yeni dizine alınan yolları eklemeyi denemeli ve sorgunun bunları kullanıp kullanmayacağını denetlemeniz gerekir.
Olası dizinli yollar
Olası tek dizinler ve olası bileşik dizinler sırasıyla eklenen yolları ve eklendiğinde sorgunun kullanabileceği bileşik dizinleri gösterir. Olası dizinlenmiş yollar görüyorsanız, bunları dizin oluşturma ilkenize eklemeyi ve sorgu performansını geliştirip geliştirmediklerini gözlemlemeniz gerekir.
Olası dizinli yolların listesini, bir sorgunun belirli bir dizinlenmiş yolu kullanacağının kesin kanıtı yerine öneriler olarak düşünün. Olası dizinli yollar, bir sorgunun kullanabileceği dizinli yolların kapsamlı bir listesi değildir. Ayrıca, bazı olası dizinli yolların sorgu performansı üzerinde herhangi bir etkisi olmaz. Önerilen dizine alınan yolları ekleyin ve sorgu performansını artırdıklarını onaylayın.
Not
Dizin oluşturma ölçümleri hakkında geri bildiriminiz var mı? Duymak istiyoruz! Geri bildirimleri doğrudan Azure Cosmos DB mühendislik ekibiyle paylaşmaktan çekinmeyin: cosmosdbindexing@microsoft.com
Dizin etki puanı
Dizin etki puanı, sorgu şeklini temel alan dizine alınan bir yolun sorgu performansı üzerinde önemli bir etkiye sahip olma olasılığıdır. Başka bir deyişle, dizin etki puanı, bu belirli dizinli yol olmadan sorgu RU ücretinin önemli ölçüde daha yüksek olma olasılığıdır.
İki olası dizin etkisi puanı vardır: yüksek ve düşük. Birden çok olası dizinli yolunuz varsa, yüksek etki puanına sahip dizinli yollara odaklanmanızı öneririz.
Dizin etki puanında kullanılan tek ölçüt sorgu şeklidir. Örneğin, aşağıdaki sorguda dizine alınan yola /name/?
yüksek bir dizin etki puanı atanır:
SELECT *
FROM c
WHERE c.name = "Samer"
Verilerin doğasına bağlı olarak gerçek etki. Filtreyle /name
yalnızca birkaç öğe eşleşiyorsa, dizine alınan yol sorgu RU ücretini önemli ölçüde artırır. Ancak çoğu öğe yine de filtreyle /name
eşleşiyorsa, dizine alınan yol sorgu performansını artırmayabilir. Bu durumların her birinde, dizine alınan yola /name/?
yüksek bir dizin etki puanı atanır çünkü sorgu şeklini temel alan dizine alınan yolun sorgu performansını artırma olasılığı yüksektir.
Ek örnekler
Örnek sorgu
SELECT c.id
FROM c
WHERE c.name = 'Tim' AND c.age > 15 AND c.town = 'Redmond' AND c.timestamp > 2349230183
Dizin ölçümleri
Index Utilization Information
Utilized Single Indexes
Index Spec: /name/?
Index Impact Score: High
---
Index Spec: /age/?
Index Impact Score: High
---
Index Spec: /town/?
Index Impact Score: High
---
Index Spec: /timestamp/?
Index Impact Score: High
---
Potential Single Indexes
Utilized Composite Indexes
Potential Composite Indexes
Index Spec: /name ASC, /town ASC, /age ASC
Index Impact Score: High
---
Index Spec: /name ASC, /town ASC, /timestamp ASC
Index Impact Score: High
---
Bu dizin ölçümleri, sorgunun dizine alınan yolları /name/?
, , /age/?
/town/?
ve /timestamp/?
kullandığını gösterir. Dizin ölçümleri ayrıca bileşik dizinleri (/name ASC, /town ASC, /age ASC)
ekleme olasılığının yüksek olduğunu ve (/name ASC, /town ASC, /timestamp ASC)
performansı daha da geliştireceğini gösterir.
Sonraki adımlar
Dizin oluşturma hakkında daha fazla bilgiyi aşağıdaki makalelerde bulabilirsiniz: