Indeksowanie metryk w usłudze Azure Cosmos DB
DOTYCZY: NoSQL
Usługa Azure Cosmos DB udostępnia metryki indeksowania pokazujące zarówno wykorzystane ścieżki indeksowane, jak i zalecane ścieżki indeksowane. Metryki indeksowania umożliwiają optymalizowanie wydajności zapytań, szczególnie w przypadkach, gdy nie masz pewności, jak zmodyfikować zasady indeksowania.
Obsługiwane wersje zestawu SDK
Metryki indeksowania są obsługiwane w następujących wersjach zestawu SDK: | Zestaw SDK | Obsługiwane wersje | | --- | --- | | Zestaw .NET SDK w wersji 3 | >= 3.21.0 | | Zestaw Java SDK w wersji 4 | >= 4.19.0 | | Zestaw SDK języka Python | >= 4.6.0 |
Włączanie metryk indeksowania
Metryki indeksowania dla zapytania można włączyć, ustawiając PopulateIndexMetrics
właściwość na true
. Jeśli nie zostanie określony, PopulateIndexMetrics
wartość domyślna to false
. Zalecamy włączenie tylko metryk indeksu na potrzeby rozwiązywania problemów z wydajnością zapytań. Jeśli zapytania i zasady indeksowania pozostają takie same, metryki indeksu są mało prawdopodobne. Zamiast tego zalecamy identyfikowanie kosztownych zapytań przez monitorowanie opłat za jednostki ŻĄDANIA i opóźnienie przy użyciu dzienników diagnostycznych.
- Zestaw SDK platformy .NET
- Synchronizacja zestawu JAVA SDK
- Java SDK Async
- Zestaw SDK dla języka JavaScript
- Zestaw SDK dla języka Python
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);
}
Przykładowe dane wyjściowe
W tym przykładowym zapytaniu obserwujemy używane ścieżki /Item/?
i /Price/?
potencjalne indeksy (/Item ASC, /Price ASC)
złożone .
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
---
Używane ścieżki indeksowane
Używane pojedyncze indeksy i używane indeksy złożone pokazują odpowiednio dołączone ścieżki i indeksy złożone używane przez zapytanie. Zapytania mogą używać wielu ścieżek indeksowanych, a także kombinacji dołączonych ścieżek i indeksów złożonych. Jeśli ścieżka indeksowana nie jest wyświetlana jako używana, usunięcie ścieżki indeksowanej nie będzie miało żadnego wpływu na wydajność zapytania.
Rozważ listę używanych ścieżek indeksowanych jako dowód, że zapytanie użyło tych ścieżek. Jeśli nie masz pewności, czy nowa ścieżka indeksowana poprawi wydajność zapytań, spróbuj dodać nowe ścieżki indeksowane i sprawdzić, czy zapytanie ich używa.
Potencjalne ścieżki indeksowane
Potencjalne pojedyncze indeksy i potencjalne indeksy złożone pokazują odpowiednio dołączone ścieżki i indeksy złożone, które w przypadku dodania mogą być używane przez zapytanie. Jeśli widzisz potencjalne ścieżki indeksowane, rozważ dodanie ich do zasad indeksowania i sprawdzenie, czy zwiększają one wydajność zapytań.
Rozważ listę potencjalnych ścieżek indeksowanych jako rekomendacje, a nie jednoznacznych dowodów, że zapytanie będzie używać określonej ścieżki indeksowanej. Potencjalne ścieżki indeksowane nie są wyczerpującą listą ścieżek indeksowanych, których może używać zapytanie. Ponadto istnieje możliwość, że niektóre potencjalne ścieżki indeksowane nie będą miały żadnego wpływu na wydajność zapytań. Dodaj zalecane ścieżki indeksowane i upewnij się, że zwiększają wydajność zapytań.
Uwaga
Czy masz jakieś opinie na temat metryk indeksowania? Chcemy to usłyszeć! Możesz podzielić się opiniami bezpośrednio z zespołem inżynierów usługi Azure Cosmos DB: cosmosdbindexing@microsoft.com
Wynik wpływu indeksu
Wynik wpływu indeksu to prawdopodobieństwo, że ścieżka indeksowana na podstawie kształtu zapytania ma znaczący wpływ na wydajność zapytań. Innymi słowy, wskaźnik wpływu na indeks to prawdopodobieństwo, że bez tej określonej zindeksowanej ścieżki opłata za jednostkę RU zapytania byłaby znacznie wyższa.
Są dwie możliwe wartości wskaźnika wpływu na indeks: wysoki i niski. Jeśli masz wiele potencjalnych ścieżek indeksowanych, zalecamy skupienie się na ścieżkach indeksowanych z wysokim współczynnikiem wpływu.
Jedynymi kryteriami używanymi w wyniku wpływu indeksu jest kształt zapytania. Na przykład w poniższym zapytaniu ścieżka /name/?
indeksowana zostanie przypisana do wyniku wysokiego wpływu indeksu:
SELECT *
FROM c
WHERE c.name = "Samer"
Rzeczywisty wpływ zależy od charakteru danych. Jeśli tylko kilka elementów pasuje do filtru /name
, indeksowana ścieżka znacznie poprawi opłatę za jednostki ŻĄDANIA zapytania. Jeśli jednak większość elementów pasuje do filtru /name
, indeksowana ścieżka może nie poprawić wydajności zapytań. W każdym z tych przypadków ścieżka /name/?
indeksowana zostanie przypisana do wyniku wysokiego wpływu indeksu, ponieważ na podstawie kształtu zapytania ścieżka indeksowana ma duże prawdopodobieństwo poprawy wydajności zapytań.
Dodatkowe przykłady
Przykład kwerendy
SELECT c.id
FROM c
WHERE c.name = 'Tim' AND c.age > 15 AND c.town = 'Redmond' AND c.timestamp > 2349230183
Metryki indeksu
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
---
Te metryki indeksu pokazują, że zapytanie użyło indeksowanych ścieżek /name/?
, /age/?
, /town/?
i /timestamp/?
. Metryki indeksu wskazują również, że istnieje duże prawdopodobieństwo dodania indeksów złożonych (/name ASC, /town ASC, /age ASC)
i (/name ASC, /town ASC, /timestamp ASC)
dalsze zwiększenie wydajności.
Następne kroki
Przeczytaj więcej na temat indeksowania w następujących artykułach: