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


Кэширование результатов (предварительная версия)

Применимо к:✅ Конечная точка аналитики SQL и хранилище в Microsoft Fabric

Кэширование результирующих наборов (предварительная версия) — это встроенная оптимизация производительности для хранилища данных Fabric и конечных точек аналитики SQL Lakehouse, которая уменьшает задержку при чтении.

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

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

Это важно

Эта функция доступна в предварительной версии.

Автоматическое управление кэшем

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

Кэширование результирующих наборов применяется к SELECT запросам T-SQL для таблиц хранилища, ссылкам на источники OneLake и ссылкам на источники, не относящиеся к Azure. Управление кэшем обрабатывается автоматически, регулярно вытесняя кэш по мере необходимости.

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

Настройте кэширование результирующих наборов

Кэширование наборов результатов конфигурируемо на уровне элемента.

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

Во время предварительной версии кэширование результирующих наборов по умолчанию отключено для всех элементов.

Конфигурация на уровне элемента

Используйте команду ALTER DATABASE SET T-SQL, чтобы включить кэширование результирующих наборов для озера или хранилища. Используйте конечную точку аналитики SQL в Lakehouse для подключения и запуска запросов T-SQL.

ALTER DATABASE <Fabric_item_name>
SET RESULT_SET_CACHING ON;

Значение параметра можно проверить в sys.database, например, чтобы просмотреть значение текущего контекста в конечной точке аналитики SQL Fabric Warehouse или Lakehouse SQL:

SELECT name, is_result_set_caching_on 
FROM sys.databases
WHERE database_id = db_id();

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

ALTER DATABASE <Fabric_item_name>
SET RESULT_SET_CACHING OFF;

Конфигурация уровня запроса

После включения кэширования результирующих наборов в элементе его можно отключить для отдельного запроса.

Это может быть полезно для отладки или тестирования запроса A/B. Отключите кэширование результирующих наборов для запроса, вложив это указание в конце SELECT:

OPTION ( USE HINT ('DISABLE_RESULT_SET_CACHE') );

Проверка использования кэша наборов результатов

Использование кэша результирующих наборов можно проверить в двух местах: выходные данные сообщений и системное представление queryinsights.exec_requests_history.

В выходных данных сообщения запроса (видимых в редакторе запросов Fabric или SQL Server Management Studio) инструкция "Кэш результирующих наборов была использована" будет отображаться после выполнения запроса, если запрос смог использовать существующий кэш результирующих наборов.

Снимок экрана: результаты запроса, показывающие использование кэширования результирующих наборов.

В queryinsights.exec_requests_history столбец result_cache_hit отображает значение, указывающее использование кэша результирующих наборов для каждого выполнения запроса:

  • 2: запрос использовал кэш результатов (запрос попал в кэш)
  • 1: запрос создал кэш результирующих наборов
  • 0: запрос не применим для создания или использования кэша результирующих наборов

Рассмотрим пример.

SELECT result_cache_hit, command, *
FROM queryinsights.exec_requests_history
ORDER BY submit_time DESC;

Снимок экрана из редактора запросов Fabric, на котором показан запрос в представлении queryinsights.exec_requests_history.

Существуют различные причины, по которым система может определить, что запрос не подходит для кэша результирующих наборов. Некоторые из причин могут включать:

  • Кэш больше не существует или стал недействителен из-за изменения данных, что делает его непригодным для повторного использования.
  • Запрос не детерминирован и не подходит для создания кэша.
  • Запрос не является оператором SELECT .