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


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

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).
  • Эти два запроса выполняются в одной базе данных.
  • Два запроса используют одинаковые свойства запроса клиента. Для кэширования игнорируются следующие свойства:

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

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

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

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

  • Выполнение запроса успешно завершено и
  • Размер результатов запроса не превышает 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и политики вытеснения, применяются те же ресурсы и политики вытеснения.

Синтаксис

setquery_results_cache_per_shard; Запрос

Примечание.

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

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

Пример

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