Udostępnij za pośrednictwem


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.

    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: