Кэш результатов запроса
Область применения: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
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).
- Эти два запроса выполняются в одной базе данных.
- Два запроса используют одинаковые свойства запроса клиента. Для кэширования игнорируются следующие свойства:
- ClientRequestId
- Приложение
- User
Несовместимые запросы
Результаты запроса не будут кэшироваться, если одно из следующих условий имеет значение true:
- Запрос ссылается на таблицу с включенной политикой RestrictedViewAccess .
- Запрос ссылается на таблицу с включенной политикой RowLevelSecurity .
- В запросе используются любые из следующих функций:
- Запрос обращается к внешней таблице или внешним данным.
- Запрос использует оператор подключаемого модуля оценки.
Нет допустимой записи кэша
Если кэшированный результат, удовлетворяющий ограничениям времени, не удалось найти или не удалось найти кэшированный результат из "идентичного" запроса в кэше, запрос будет выполнен и его результаты кэшированы, если:
- Выполнение запроса успешно завершено и
- Размер результатов запроса не превышает 16 МБ.
Результаты из кэша
Как служба указывает, что результаты запроса обслуживаются из кэша?
При ответе на запрос Kusto отправляет другую таблицу ответов ExtendedProperties , содержащую Key
столбец и Value
столбец.
В кэшированных результатах запроса будет добавлена другая строка, добавленная в следующую таблицу:
- Столбец строки
Key
будет содержать строкуServerCache
- Столбец строки
Value
будет содержать контейнер свойств с двумя полями:OriginalClientRequestId
— указывает clientRequestId исходного запроса.OriginalStartedOn
— указывает время начала выполнения исходного запроса.
Распределение
Кэш не используется узлами кластера. Каждый узел имеет выделенный кэш в собственном частном хранилище. Если два идентичных запроса приземлились на разных узлах, запрос будет выполняться и кэшироваться на обоих узлах. Этот процесс может произойти, если используется слабая согласованность . Задав согласованность 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