Очистка процедурного кэша для отдельной базы в SQL Server

Административные скрипты MS SQL > Очистка процедурного кэша для отдельной базы в SQL Server
05.07.2013 16:07:11



Статья:

Стандартная команда DBCC FREEPROCCACHE очищает процедурный кэш без возможности какой-либо "фильтрации" именно по базе данных.

Есть 2 способа решения задачи: простой и более-менее документированный.
Документированный - это выполнить процедуру sp_recompile для каждой таблицы в базе данных.
Это приведет к тому, что все запросы, находящиеся в кэше и ссылающиеся на таблицы этой базы будут рекомпилированы при последующих выполнениях.
Проблема этого метода в том, что сами по себе запросы останутся в кэше и память не будет очищена от них.
Впрочем, если наша задача - по каким-то соображениям именно вызвать компиляцию запросов, то она будет решена.

Второй способ - недокументированная команда DBCC FLUSHPROCINDB(dbid)
Вместо dbid передаем идентификатор базы данных, возвращаемый функцией db_id(), саму функцию в команде dbcc использовать не получится.
Эта команда полноценно очищает процедурный кэш от любых запросов, относящихся к конкретной базе данных.