Поделиться через


Метрики индекса в Azure Cosmos DB

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

Azure Cosmos DB предоставляет метрики индекса для отображения использованных и рекомендуемых индексированных путей. Метрики индекса можно использовать для оптимизации производительности запроса, особенно если вы не знаете, как изменить политику индексирования.

Поддерживаемые версии пакета SDK

Метрики индексирования поддерживаются в следующих версиях пакета SDK: | Пакет SDK | Поддерживаемые версии | | --- | --- | | Пакет SDK для .NET версии 3 | >= 3.21.0 | | Пакет SDK java версии 4 | >= 4.19.0 | | Пакет SDK для Python | >= 4.6.0 |

Включение метрик индексирования

Чтобы активировать метрики индекса для запроса, присвойте свойству PopulateIndexMetricsзначение true. Если значение не указано, параметру PopulateIndexMetrics будет по умолчанию задано значение false. Метрики индекса рекомендуется активировать только для устранения неполадок с производительностью запроса. Пока ваши запросы и политика индексирования остаются прежними, метрики индекса вряд ли изменятся. Вместо этого мы рекомендуем выявлять дорогостоящие запросы, отслеживая стоимость ЕЗ и задержку запроса с помощью журналов диагностики.

    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);
        }

Пример результата

В этом примере запроса показаны использованные пути /Item/? и /Price/? возможные составные индексы (/Item ASC, /Price ASC).

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
    ---

Использованные индексированные пути

Использованные одиночные и составные индексы отображают включенные пути и составные индексы, использованные запросом, соответственно. Запросы могут использовать несколько индексированных путей, а также сочетание включенных путей и составных индексов. Если индексированный путь не указан как использованный, его удаление не повлияет на производительность запроса.

Список использованных индексированных путей фактически подтверждает, что запрос использовал конкретные пути. Если вы не уверены, что новый индексированный путь повысит производительность запроса, попробуйте добавить его и проверьте, используется ли он в запросе.

Возможные индексированные пути

Потенциальные отдельные индексы и потенциальные составные индексы соответственно показывают включенные пути и составные индексы, которые, если они добавлены, запрос может использовать. Если вы видите возможные индексированные пути, можно попробовать добавить их в политику индексирования и посмотреть, повысится ли производительность запроса.

Список возможных индексированных путей следует рассматривать как рекомендации, а не как подтверждение того, что запрос будет использовать определенный индексированный путь. Список индексированных путей, которые может использовать запрос, не ограничивается возможными индексированными путями. Кроме того, некоторые возможные индексированные пути могут никак не влиять на производительность запроса. Добавьте рекомендуемые индексированные пути и убедитесь, что они улучшают производительность запроса.

Примечание.

Хотите поделиться мнением о метриках индекса? Нам очень интересно ваше мнение! Вы можете поделиться им непосредственно с командой разработчиков Azure Cosmos DB по адресу cosmosdbindexing@microsoft.com

Оценка влияния индекса

Оценка влияния индекса — это вероятность того, что индексированный путь, соответствующий форме запроса, существенно влияет на производительность запроса. Другими словами, оценка влияния индекса — это вероятность того, что без этого индексированного пути стоимость ЕЗ для запроса была бы значительно выше.

Существует две возможных оценки влияния на индекс: высокая и низкая. При наличии нескольких потенциальных индексированных путей рекомендуется сосредоточиться на индексированных путях с высокой оценкой влияния.

При оценке влияния индекса используется единственный критерий: форма запроса. Например, в приведенном ниже запросе индексированному пути /name/? будет присвоена высокая оценка влияния на индекс.

SELECT * 
FROM c
WHERE c.name = "Samer"

Фактическое влияние зависит от характера данных. Если фильтру /name соответствует всего несколько элементов, индексированный путь значительно повысит стоимость ЕЗ для запроса. Однако если большинство элементов в конечном итоге соответствуют фильтру /name, индексированный путь может не повысить производительность запроса. В каждом из этих случаев индексированному пути /name/? будет присвоена высокая оценка влияния на индекс, так как согласно форме запроса индексированный путь с высокой вероятностью повышает производительность запроса.

Дополнительные примеры

Пример запроса

SELECT c.id 
FROM c 
WHERE c.name = 'Tim' AND c.age > 15 AND c.town = 'Redmond' AND c.timestamp > 2349230183

Метрики индекса

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
    ---

Эти метрики индекса показывают, что в запросе использовались индексированные пути /name/?, /age/?, /town/? и /timestamp/?. Метрики индекса также указывают на то, что при добавлении составных индексов (/name ASC, /town ASC, /age ASC) и (/name ASC, /town ASC, /timestamp ASC) производительность, скорее всего, повысится.

Следующие шаги

Дополнительные сведения об индексировании вы найдете в следующих статьях.