Кэш результатов запроса

Kusto включает кэш результатов запроса. При выполнении запроса можно выбрать получение кэшированных результатов. Вы сможете повысить производительность запросов и снизить потребление ресурсов, если результаты запроса могут быть возвращены кэшем. Однако эта производительность происходит за счет некоторой "устаревание" в результатах.

Использование кэша

Задайте параметр как query_results_cache_max_age часть запроса, чтобы использовать кэш результатов запроса. Этот параметр можно задать в тексте запроса или в качестве свойства запроса клиента. Пример:

set query_results_cache_max_age = time(5m);
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id

Значение параметра — это timespan значение типа , указывающее максимальный "возраст" кэша результатов, измеряемый по времени начала запроса. За пределами заданного интервала времени запись кэша устарела и больше не будет использоваться. Установка значения 0 эквивалентна не настройке параметра.

Совместимость между запросами

Идентичные запросы

Кэш результатов запросов возвращает результаты только для запросов, которые считаются "идентичными" предыдущему кэшированному запросу. При выполнении всех следующих условий два запроса считаются идентичными:

Несовместимые запросы

Результаты запроса не кэшируются, если выполняется какое-либо из следующих условий:

Нет допустимой записи кэша

Если не удалось найти кэшированный результат, удовлетворяющий ограничениям по времени, или нет кэшированного результата из "идентичного" запроса в кэше, запрос будет выполнен и его результаты кэшированы, если:

  • Выполнение запроса завершается успешно, и
  • Размер результатов запроса не превышает 16 МБ.

Результаты из кэша

Как служба указывает, что результаты запроса обслуживаются из кэша? При ответе на запрос Kusto отправляет другую таблицу ответов ExtendedProperties , содержащую Key столбец и Value столбец. Кэшированные результаты запроса будут содержать еще одну строку, добавленную к этой таблице:

  • Столбец строки Key будет содержать строку ServerCache
  • Столбец строки Value будет содержать контейнер свойств с двумя полями:
    • OriginalClientRequestId — задает идентификатор ClientRequestId исходного запроса.
    • OriginalStartedOn — указывает время начала выполнения исходного запроса.

Distribution

Кэш не является общим для узлов кластера. Каждый узел имеет выделенный кэш в собственном частном хранилище. Если два одинаковых запроса размещаются на разных узлах, запрос будет выполнен и кэширован на обоих узлах. Этот процесс может произойти, если используется слабая согласованность . Задав для параметра согласованность affinitizedweakconsistencyзапросов значение , вы можете получить слабо согласованность запросов, которые идентичны, помещаются в одну и ту же головку запросов и тем самым увеличить частоту попаданий в кэш.

управление;

Поддерживаются следующие команды управления и наблюдаемости:

  • Показать кэш результатов запроса. Возвращает статистику, связанную с кэшем результатов запроса.
  • Очистить кэш результатов запроса. Очищает кэш результатов запроса.
  • Обновить запись кэша запросов: определенную запись кэша запросов можно обновить с помощью query_results_cache_force_refreshсвойства запроса клиента (OptionQueryResultsCacheForceRefresh). Если задано значение true, эта команда принудительно обновляет кэш результатов запроса при наличии существующего кэша. Этот процесс полезен в сценариях, в которых результаты запросов должны быть доступны для выполнения запросов. Это свойство должно использоваться в сочетании с query_results_cache_max_age и отправляться через объект ClientRequestProperties. Свойство не может быть частью оператора set.

Capacity

Емкость кэша в настоящее время фиксирована в 1 ГБ на узел кластера. Политика вытеснения — LRU.

Кэш результатов запросов на уровне сегментов

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

Например, запрос, который выполняется каждые 10 секунд и занимает последние 1 час, может воспользоваться преимуществами кэширования промежуточных результатов запроса на уровне хранилища (сегмента).

Кэш результатов запроса на уровне сегментов автоматически включается при Query results cache использовании . Так как он использует тот же кэш, что Query results cacheи , применяются те же политики емкости и вытеснения.

Синтаксис

setquery_results_cache_per_shard; Запроса

Примечание

Этот параметр можно задать в тексте запроса или в качестве свойства запроса клиента.

Дополнительные сведения о соглашениях о синтаксисе.

Пример

set query_results_cache_per_shard;
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id