Чи зберігають кешовані процедури SQL Server результати кешування даних?


11

Я чув це від друзів, але ніколи не досліджував, чи це правда.

Чи правда, що результати даних виконаного запиту зберігаються в кеші?

Я маю на увазі, якщо у мене є збережена процедура, наприклад:

SELECT * FROM USERLIST

... чи правда, що результат (список користувачів у цьому випадку) зберігається в кеші.

Крім того, якщо у мене є такі:

SELECT * FROM USERLIST WHERE user="user"
SELECT * FROM USERLIST WHERE user="userzzz"

(в якому користувач / userzzz передаються як параметри), чи правильно він зберігає 2 різних результату в кеші бази даних.

Я не думаю, але я хочу підтвердження від вас, експерти!


тепер просто відповів на вас marc_s stackoverflow.com/questions/8559443 / ...

Відповіді:


19

Результати запитів не кешовані

Однак таблиця джерела та дані індексу та метадані будуть кешовані після першого використання (за умови подальшого використання, навантаження та тиску пам'яті)

Тобто, результати запиту будуть оцінюватися при кожному виконанні, але таблиці (та будь-які індекси тощо), які використовуються в запиті, швидше за все, будуть вже в пам'яті.

Складений план виконання буде кешований, саме там, де я підозрюю, виникає плутанина


"Тобто, результати запиту будуть оцінюватися при кожному виконанні, але таблиці (та будь-які індекси тощо), використовувані в запиті, швидше за все, будуть вже в пам'яті." : так, також я не використовую SP, мабуть ... це оптимізація бази даних, це не має значення для Sp, правда?

@markzzz: майже весь SQL складено до плану виконання, будь то пряме оновлення,
вибір

6

Коли виконується збережена процедура, вона оптимізується та компілюється, і план запитів розміщується в кеш-процедурі.

Процедури залишаються в кеші для інших користувачів, поки є місце. Процедури видаляються за допомогою найменш використовуваного алгоритму (LRU).


У той час як первинне виконання збереженої процедури вимагає отримання системних процедур на диску, для подальших виконання можна просто отримати оптимізований план з кешу процедури. Така поведінка може призвести до значного підвищення продуктивності.

Отже, кеш - це оптимізований план із збереженої процедури, а не результати збереженої процедури.


6

Коли запит готовий до обробки SQL Server, менеджер SQL шукає його cache; а якщо його там немає, його треба скласти. Процес компіляції включає кілька речей.

Коли виконується збережена процедура, вона оптимізується та компілюється. відповідно до цього план запитів розміщується в кеш-процедурі.

Перегляньте Compilation and Executionрозділ " Внутрішні системи та архітектура запитів Microsoft SQL Server" для отримання детальної інформації про обробку запитів тощо.

Кінцевим продуктом фази компіляції є план запитів, який вводиться в кеш процедури. Результат / операція SQL-запиту може бути розміром у МБ, ГБ, тому він не міститься в кеші процедур або в плані запитів.

Перевірте наступну діаграму (від MSDN) щодо виконання збереженої процедури, щоб зрозуміти своє запитання: введіть тут опис зображення


-1

В основному SQL Server проходить ці кроки для виконання будь-якого запиту (збережений виклик процедури або спеціальний оператор SQL):

1) синтаксично перевірити запит
2) якщо це нормально - він перевіряє кеш плану, щоб побачити, чи є у нього вже план виконання цього запиту
3) чи є план виконання - цей план (повторно) використовується і запит виконується
4) якщо плану ще немає, визначається план виконання
5) план зберігається в кеші плану для подальшого повторного використання
6) запит виконується

(копія відповіді Marc_s)


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.