Очистка процедурного кэша для отдельной базы в SQL Server
Для очистки процедурного кэша sql есть стандартная команда DBCC FREEPROCCACHE которая очищает процедурный кэш но без возможности какой либо "фильтрации" конкретно по базе данных.
Имеется два способа решения данной задачи задачи:
Имеется два способа решения данной задачи задачи:
Простой и документированный.
Документированный способ - выполние процедуры sp_recompile для каждой таблицы в базе данных.
Что приведет к рекомпиляции запросов, при последующих выполнениях, находящихся в кеше и ссылающихся на таблицы базы.
Недостаток такого способа в том, что эти запросы так и останутся в кэше и не очистятся из памяти.
Таким образом данный способ решает вопрос вызова компиляции запросов, не более.
Простой способ - DBCC FLUSHPROCINDB(dbid) недокументированная команда MS SQL.
Что приведет к рекомпиляции запросов, при последующих выполнениях, находящихся в кеше и ссылающихся на таблицы базы.
Недостаток такого способа в том, что эти запросы так и останутся в кэше и не очистятся из памяти.
Таким образом данный способ решает вопрос вызова компиляции запросов, не более.
Простой способ - DBCC FLUSHPROCINDB(dbid) недокументированная команда MS SQL.
dbid - идентификатор базы данных, возвращаемый функцией db_id(), так как саму функцию в команде "dbcc" использовать не удасться.
Данная команда полноценно очистит процедурный кэш от любых имеющихся запросов, которые отностяся к конкретной явно указанной базе данных.
Данные способы очистки кеша проверены на SQL Server 2005 и SQL Server 2008 R2.