Поделиться через


DBCC FREEPROCCACHE (Transact-SQL)

Удаляет все элементы из кэша планов, удаляет заданный план из кэша планов с помощью указания дескриптора плана или дескриптора SQL либо удаляет все записи кэша, связанные с указанным пулом ресурсов.

Значок ссылки на разделСоглашения о синтаксисе Transact-SQL

Синтаксис

DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]

Аргументы

  • ( { plan_handle | sql_handle | pool_name } )
    Аргумент plan_handle уникально идентифицирует план запроса для выполненного пакета, планы которого находятся в кэше планов. Аргумент plan_handle имеет тип varbinary(64) и может быть получен из следующих объектов DMO:

    Аргумент sql_handle представляет дескриптор SQL очищаемого пакета. Аргумент sql_handle имеет тип varbinary(64) и может быть получен из следующих объектов DMO:

    Аргумент pool_name представляет имя пула ресурсов регулятора ресурсов. Аргумент pool_name имеет тип sysname и может быть получен с помощью запроса к динамическому административному представлению sys.dm_resource_governor_resource_pools.

    Чтобы связать группу рабочей нагрузки регулятора ресурсов с пулом ресурсов, запросите динамическое административное представление sys.dm_resource_governor_workload_groups. Чтобы получить сведения о группе рабочей нагрузки для сеанса, запросите динамическое административное представление sys.dm_exec_sessions.

  • WITH NO_INFOMSGS
    Подавляет вывод всех информационных сообщений.

Замечания

Инструкция DBCC FREEPROCCACHE используется для аккуратной очистки кэша планов. Освобождение кэша планов приводит, например, к тому, что хранимая процедура повторно компилируется, а не используется из кэша. Это может стать причиной внезапного временного снижения производительности обработки запросов. В SQL Server для каждого очищенного хранилища кэша в кэше планов журнал ошибок содержит следующее информационное сообщение: «SQL Server обнаружил %d экземпляров, записанных на диск хранилищ кэша для хранилища кэша %s (части кэша планов) в результате операций DBCC FREEPROCCACHE или DBCC FREESYSTEMCACHE». Это сообщение протоколируется каждые пять минут при сбросе кэша в течение этого временного интервала.

Результирующие наборы

Если предложение WITH NO_INFOMSGS не указано, инструкция DBCC FREEPROCCACHE возвращает:

«Выполнение инструкции DBCC завершено. Если инструкция DBCC выдает сообщения об ошибках, обратитесь к системному администратору».

Разрешения

Требует разрешения ALTER SERVER STATE на сервере.

Примеры

А. Очистка плана запроса из кэша планов

В следующем примере план запроса очищается из кэша планов путем указания дескриптора плана запроса. Чтобы обеспечить наличие запроса-образца в кэше планов, сначала выполните следующий запрос. Динамические административные представления sys.dm_exec_cached_plans и sys.dm_exec_sql_text запрашиваются для возврата дескриптора плана соответствующего запроса. Затем значение дескриптора плана из результирующего набора вставляется в инструкцию DBCC FREEPROCACHE для удаления из кэша планов именно этого плана.

USE AdventureWorks2008R2;
GO
SELECT * FROM Person.Address;
GO
SELECT plan_handle, st.text
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE text LIKE N'SELECT * FROM Person.Address%';
GO

Ниже приводится результирующий набор.

plan_handle text

--------------------------------------------------  -----------------------------

0x060006001ECA270EC0215D05000000000000000000000000 SELECT * FROM Person.Address;

(Обработано строк: 1)

-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO

Б. Очистка всех планов из кэша планов

В следующем примере из кэша планов удаляются все элементы. Предложение WITH NO_INFOMSGS указывается, чтобы избежать отображения информационного сообщения.

DBCC FREEPROCCACHE WITH NO_INFOMSGS;

В. Очистка всех записей кэша, связанных с пулом ресурсов

В следующем примере очищаются все записи кэша, связанные с указанным пулом ресурсов. Сначала запрашивается представление sys.dm_resource_governor_resource_pools, чтобы получить значение для аргумента pool_name.

SELECT * FROM sys.dm_resource_governor_resource_pools;
GO
DBCC FREEPROCCACHE ('default');
GO