Хранимые процедуры компилируются при первом использовании.
Существуют варианты очистки кэша:
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:
Часто я наблюдаю значительные задержки при выполнении хранимых процедур, запрашивающих очень небольшой объем данных, который не может быть объяснен только необходимостью чтения огромных объемов данных.
Можем ли мы считать это - значительные задержки на незначительно малых данных - контекстом этого вопроса?