Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если кэширование результирующих наборов включено, выделенный пул SQL автоматически кэширует результаты запроса в пользовательской базе данных для повторяющегося использования. Это позволяет последующим выполнениям запросов получать результаты непосредственно из сохраненного кэша, поэтому повторное вычисление не требуется. Кэширование результирующих наборов повышает производительность запросов и уменьшает использование вычислительных ресурсов. Кроме того, запросы, использующие кэшированный набор результатов, не задействуют слоты параллелизма и, следовательно, не учитываются в существующих лимитах параллелизма. Для безопасности пользователи могут получать доступ только к кэшируемым результатам, если у них есть те же разрешения на доступ к данным, что и пользователи, создающие кэшированные результаты. Кэширование результирующих наборов по умолчанию выключено на уровнях базы данных и сеансов.
Замечание
Кэширование результирующих наборов нельзя использовать в сочетании с DECRYPTBYKEY. Если эту криптографическую функцию все же нужно использовать, убедитесь, что кэширование результирующих наборов отключено (на уровне сеанса или уровне базы данных) на момент выполнения.
Ключевые команды
Включение и отключение кэширования результирующих наборов данных в пользовательской базе данных
Включение или выключение кэширования результирующих наборов для сеанса
Проверьте размер кэшированного результированного набора
Что не кэшировано
После включения кэширования результирующих наборов для базы данных результаты кэшируются для всех запросов, пока кэш не будет заполнен, за исключением следующих запросов:
- Запросы со встроенными функциями или выражениями среды выполнения, которые не детерминируются, даже если нет изменений в данных или запросах базовых таблиц. Например, DateTime.Now(), GetDate().
- Запросы с помощью определяемых пользователем функций
- Запросы с помощью таблиц с безопасностью на уровне строк
- Запросы, возвращающие строки данных размером более 64 КБ
- Запросы, возвращающие большие данные размером (>10 ГБ)
Замечание
- Некоторые недетерминированные функции и выражения среды выполнения могут быть детерминированными для повторяющихся запросов к тем же данным. Например, ROW_NUMBER().
- Используйте ORDER BY в запросе, если порядок или последовательность строк в результирующем наборе запросов важен для логики приложения.
- Если данные в столбцах ORDER BY не являются уникальными, то для строк с одинаковыми значениями в столбцах ORDER BY нет гарантированного порядка строк, независимо от того, включена ли кэширование результирующего набора или отключена.
Это важно
Операции создания кэша результирующих наборов и извлечения данных из кэша выполняются на узле управления выделенного экземпляра пула SQL. Если кэширование результирующих наборов включено, выполнение запросов, возвращающих большой результирующий набор (например, >1 ГБ), может вызвать высокий уровень ограничения на узле управления и замедлить общую производительность запросов экземпляра. Как правило, такие запросы используются в ходе исследования данных, а также при выполнении операций извлечения, преобразования и загрузки. Чтобы избежать чрезмерной загрузки управляющего узла и снижения производительности, перед выполнение запросов такого типа пользователям следует отключить кэширование результирующего набора для базы данных.
Выполните этот запрос за время, затраченное операциями кэширования результирующих наборов для запроса:
SELECT step_index, operation_type, location_type, status, total_elapsed_time, command
FROM sys.dm_pdw_request_steps
WHERE request_id = <'request_id'>;
Ниже приведен пример выходных данных для запроса, выполненного с отключенным кэшированием результирующих наборов.
Ниже приведен пример выходных данных для запроса, выполняемого с включенным кэшированием результирующих наборов.
При использовании кэшированных результатов
Кэшированный результирующий набор повторно используется для запроса, если выполнены все следующие требования:
- Пользователь, выполняющий запрос, имеет доступ ко всем таблицам, на которые ссылается запрос.
- Существует точное совпадение между новым запросом и предыдущим запросом, создающим кэш результирующих наборов.
- В таблицах, из которых был создан кэшированный результирующий набор, нет изменений в данных или схеме.
Выполните эту команду, чтобы проверить, был ли запрос выполнен с попаданием в кэш результатов или его пропуском. Столбец result_cache_hit возвращает значение 1 для успешного обращения кэша, 0 для промаха кэша, и отрицательные значения указывают причины, почему кэширование результирующих наборов не использовалось. Проверьте sys.dm_pdw_exec_requests для подробностей.
SELECT request_id, command, result_cache_hit FROM sys.dm_pdw_exec_requests
WHERE request_id = <'Your_Query_Request_ID'>
Управление кэшируемыми результатами
Максимальный размер кэша результирующих наборов составляет 1 ТБ на базу данных. Кэшированные результаты автоматически недопустимы при изменении базовых данных запроса.
Вытеснение кэша управляется выделенным пулом SQL автоматически следующим расписанием:
- Каждые 48 часов, если набор результатов не использовался или был аннулирован.
- Когда кэш результирующих наборов приближается к максимальному размеру.
Пользователи могут вручную очистить весь кэш результирующих наборов с помощью одного из следующих параметров:
- Отключите функцию кэширования результирующих наборов в базе данных
- Запуск DBCC DROPRESULTSETCACHE во время подключения к базе данных
Приостановка базы данных не очистит кэшированный набор результатов.
Дальнейшие действия
Дополнительные советы по разработке приведены в обзоре разработки.