Как позволить SQL Server не использовать кеш в запросах?
Просто общий вопрос:
Есть ли запрос/команда, которую я могу передать SQL Server, чтобы не использовать кеш при выполнении особого запроса?
Я ищу запрос/команду, которую я могу установить, а не настройку конфигурации. Не нужно ли это делать?
Ответ 1
DBCC FREEPROCCACHE
Удалит все планы выполнения кэшированных процедур. Это приведет к повторной компиляции всех последующих вызовов процедур.
Добавление "WITH RECOMPILE" к определению процедуры приведет к перекомпиляции процедуры при каждом ее вызове.
Я не верю, что (в SQL 2005 или более раннем) есть способ очистить кэш процедур для одного плана выполнения процедур, и я бы сомневался, что вы тоже это сделаете в 2008 году.
Ответ 2
Если вы хотите заставить запрос не использовать кеш данных, лучший подход - очистить кеш, прежде чем запускать запрос:
CHECKPOINT
DBCC DROPCLEANBUFFERS
Обратите внимание, что принудительная перекомпиляция не повлияет на использование кеша данных.
Одна из причин, по которой вы не можете просто отметить отдельный запрос, чтобы избежать кеша, - это использование кеша является неотъемлемой частью выполнения запроса. Если данные уже находятся в кеше, то что SQL Server сделает с данными, если он будет прочитан второй раз? Не говоря уже о проблемах синхронизации и т.д.