Кэш результатов запроса
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 эквивалентна не настройке параметра.
Совместимость между запросами
Идентичные запросы
Кэш результатов запросов возвращает результаты только для запросов, которые считаются "идентичными" предыдущему кэшированному запросу. При выполнении всех следующих условий два запроса считаются идентичными:
- Два запроса имеют одинаковое представление (как строки UTF-8).
- Два запроса выполняются к одной базе данных.
- Два запроса используют одни и те же свойства запроса клиента. Следующие свойства игнорируются в целях кэширования:
Несовместимые запросы
Результаты запроса не кэшируются, если выполняется какое-либо из следующих условий:
- Запрос ссылается на таблицу с включенной политикой RestrictedViewAccess .
- Запрос ссылается на таблицу с включенной политикой RowLevelSecurity .
- В запросе используется любая из следующих функций:
- Запрос обращается к внешней таблице или внешним данным.
- В запросе используется оператор вычислить подключаемый модуль .
Нет допустимой записи кэша
Если не удалось найти кэшированный результат, удовлетворяющий ограничениям по времени, или нет кэшированного результата из "идентичного" запроса в кэше, запрос будет выполнен и его результаты кэшированы, если:
- Выполнение запроса завершается успешно, и
- Размер результатов запроса не превышает 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
и , применяются те же политики емкости и вытеснения.
Синтаксис
set
query_results_cache_per_shard
; Запроса
Примечание
Этот параметр можно задать в тексте запроса или в качестве свойства запроса клиента.
Дополнительные сведения о соглашениях о синтаксисе.
Пример
set query_results_cache_per_shard;
GithubEvent
| where CreatedAt > ago(180d)
| summarize arg_max(CreatedAt, Type) by Id
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по