Я слышал это от друзей, но никогда не исследовал, правда ли это.
Правда ли, что результаты данных выполненного запроса хранятся в кеше?
Я имею в виду, если у меня есть хранимая процедура, как:
SELECT * FROM USERLIST
... правда ли, что результат (в данном случае список пользователей) хранится в кеше.
Кроме того, если у меня есть эти:
SELECT * FROM USERLIST WHERE user="user"
SELECT * FROM USERLIST WHERE user="userzzz"
(в котором user / userzzz передаются в качестве параметров), верно ли, что он хранит 2 разных результата в кэше базы данных.
Я так не думаю, но я хочу от вас подтверждения, эксперты!
Ответы:
Результаты запроса не кэшируются
Однако исходная таблица, индексные данные и метаданные будут кэшироваться после 1-го использования (хотя при условии продолжительного использования, нагрузки и нагрузки на память)
То есть результаты запроса будут оцениваться при каждом выполнении, но таблицы (и любые индексы и т. Д.), Используемые запросом, скорее всего, уже будут в памяти.
Скомпилированный план выполнения будет сохранен в кеше, откуда и возникает путаница
источник
Когда хранимая процедура выполняется, она оптимизируется и компилируется, а план запроса помещается в кэш процедур.
Процедуры остаются в кэше для других пользователей, пока есть место. Процедуры удаляются с использованием алгоритма наименьшего количества использовавшихся (LRU).
Хотя первоначальное выполнение хранимой процедуры требует извлечения из sysprocedures на диске, для последующих исполнений возможно просто извлечь оптимизированный план из кэша процедур. Такое поведение может привести к значительному увеличению производительности.
Итак, в кеше находится оптимизированный план из хранимой процедуры, а не результаты хранимой процедуры.
источник
Когда запрос готов к обработке SQL Server, SQL Manager ищет его в
cache
; и если его там нет, он должен быть скомпилирован. Процесс компиляции включает в себя несколько вещей.Когда хранимая процедура выполняется, она оптимизируется и компилируется. в соответствии с этим план запроса помещается в кэш процедур.
Обратитесь к
Compilation and Execution
разделу « Внутренние компоненты и архитектура процессора запросов Microsoft SQL Server» для получения подробной информации об обработке запросов и т. Д.Проверьте следующую диаграмму (из MSDN) для выполнения хранимой процедуры, чтобы прояснить ваш вопрос:
источник
SQL Server в основном выполняет эти шаги для выполнения любого запроса (вызов хранимой процедуры или специальный оператор SQL):
1) синтаксически проверить запрос
2) если он в порядке - он проверяет кэш плана, чтобы увидеть, есть ли у него уже план выполнения для этого запроса
3) если есть план выполнения - этот план (повторно) используется и запрос выполняется
4) если плана еще нет, определяется план выполнения
5) этот план сохраняется в кэше планов для последующего повторного использования
6) выполняется запрос
(копия ответа Marc_s)
источник
Как утверждали другие, результаты запросов в SQL Server не кэшируются.
Если вы хотите кэшировать результаты запроса (или SP), есть обходные пути. Например, посмотрите эту статью на сайте Brent Ozar .
источник