как заставить хранимую процедуру предварительно кэшироваться и оставаться в памяти? - PullRequest
0 голосов

Хранимые процедуры компилируются при первом использовании.

Существуют варианты очистки кэша:

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
--To Verify whether the cache is emptied
--DBCC PROCCACHE

или перекомпиляция или уменьшение перекомпиляции.

Но возможно ли принудительно предварительно кэшировать планы выполнения часто используемых хранимых процедур и сохранять их в памяти?

Я знаю, как это сделать в ADO.NET, т. Е. Извне SQL Server, но вопрос в том, как это сделать внутри SQL Server - запускаться при запуске самого SQL Server.

(*) Например, я вижу в Мониторе активности SSMS работающий процесс (Состояние задачи: RUNNING, Команда: SELECT), который непрерывно выполняет T-SQL (в соответствии с Profiler) в контексте базы данных tempdb через SQLАгент сервера отключен, и SQL Server не загружен ничем, см. «Сведения о сеансе 54» в « Откуда все эти сеансы SQL Server? ».

Как бы я делал аналогичный резидентный процесс (или, скорее, автозапуск с помощью службы или сеанса запуска SQL Server) периодически перерабатывая хранимую процедуру?

Смежный вопрос:
Хранимая процедура выполняется медленно при первом запуске

Обновление:
Возможно, мне следовало разложить этот вопрос на 2, но мое главное любопытствоКак отключить периодическую / циклическую активность с агентом SQL Server?
Как это было сделано с вышеупомянутым сеансом RUNNING SELECT (*)?

Update2:
Часто я наблюдаю значительные задержки при выполнении хранимых процедур, запрашивающих очень небольшой объем данных, который не может быть объяснен только необходимостью чтения огромных объемов данных.

Можем ли мы считать это - значительные задержки на незначительно малых данных - контекстом этого вопроса?

Ответы [ 2 ]

0 голосов
/ 26 октября 2010

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

...