DBCC FREEPROCCACHE (Transact-SQL)

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse Analytics AnalyticsPlatform System (PDW)

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

Примечание

DBCC FREEPROCCACHE не очищает статистику выполнения для скомпилированных в собственном коде хранимых процедур. Кэш процедур не содержит сведений о скомпилированных в собственном коде хранимых процедурах. Все статистические данные выполнения, полученные при выполнении процедур, появятся в динамических административных представлениях (DMV) статистики выполнения: sys.dm_exec_procedure_stats (Transact-SQL) и sys.dm_exec_query_plan (Transact-SQL).

Соглашения о синтаксисе Transact-SQL

Синтаксис

Синтаксис для SQL Server и Базы данных SQL Azure:

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

Синтаксис для Azure Synapse Analytics и :Система платформы аналитики (PDW)

DBCC FREEPROCCACHE [ ( COMPUTE | ALL ) ]
     [ WITH NO_INFOMSGS ]
[;]

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

( { plan_handle | sql_handle | pool_name } )

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

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

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

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

WITH NO_INFOMSGS

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

COMPUTE

Очистка кэша планов запросов в каждом вычислительном узле. Это значение по умолчанию.

ALL

Очистка кэша планов запросов в каждом вычислительном узле и в управляющем узле.

Примечание

Начиная с SQL Server 2016 (13.x), ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE можно использовать для очистки кэша процедур (планов) для текущей базы данных.

Комментарии

Используйте для DBCC FREEPROCCACHE тщательной очистки кэша планов. Очистка кэша процедур (планов) приводит к исключению всех планов. В результате при выполнении входящих запросов будет компилироваться новый план, а не использоваться существующий план из кэша.

Это может стать причиной внезапного временного снижения производительности обработки запросов из-за увеличения числа компиляций. Для каждого очищенного хранилища кэша в кэше планов журнал ошибок SQL Server содержит следующее информационное сообщение:

SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

Это сообщение добавляется в журнал каждые пять минут при сбросе кэша в течение этого интервала времени.

Следующие операции по перенастройке также очищают кэш процедур:

  • доступ к счетчику контейнеров проверки кэша
  • доступ к квоте кэша проверки
  • clr enabled
  • стоимостный порог для параллелизма
  • cross db ownership chaining
  • память для создания индекса
  • максимальная степень параллелизма
  • max server memory
  • max text repl size
  • максимальное количество рабочих потоков
  • min memory per query
  • min server memory
  • ограничение стоимости регулятора запросов
  • ожидание запроса
  • remote query timeout
  • user options

В Azure SQL Database работает с экземпляром ядра СУБД, DBCC FREEPROCCACHE в котором размещается текущая база данных или эластичные пулы. Выполнение DBCC FREEPROCCACHE в пользовательской базе данных очищает кэш планов для этой базы данных. Если база данных находится в эластичном пуле, она также очищает кэш планов во всех других базах данных в этом эластичном пуле. Выполнение команды в master базе данных не влияет на другие базы данных на том же логическом сервере. Выполнение этой команды в базе данных с использованием цели службы "Базовый", S0 или S1 может очистить кэш планов в других базах данных, используя эти цели службы на том же логическом сервере.

Наборы результатов

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

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Разрешения

Применимо к: SQL Server, Система платформы аналитики (PDW)

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

Область применения: База данных SQL Azure

  • Требуется членство в роли сервера ##MS_ServerStateManager##.

Применимо к: Azure Synapse Analytics

  • Требуется членство в предопределенных роли сервера db_owner .

Замечания для Azure Synapse Analytics and Analytics Platform System (PDW)

Одновременно можно выполнять несколько DBCC FREEPROCCACHE команд.

В Azure Synapse Analytics или Система платформы аналитики (PDW) очистка кэша планов может приводить к временному снижению производительности обработки запросов, так как для входящих запросов компилируется новый план, а не используется существующий план из кэша.

DBCC FREEPROCCACHE (COMPUTE)Только при выполнении запросов на вычислительных узлах SQL Server выполняется перекомпиляция запросов. Это не приводит Azure Synapse Analytics или Analytics Platform System (PDW) к повторной компиляции плана параллельного запроса, созданного на узле Control.

DBCC FREEPROCCACHE можно отменить во время выполнения.

Ограничения для Azure Synapse Analytics and Analytics Platform System (PDW)

DBCC FREEPROCCACHE не может выполняться в транзакции.

DBCC FREEPROCCACHE не поддерживается в инструкции EXPLAIN.

Метаданные для Azure Synapse Analytics и Система платформы аналитики (PDW)

При запуске в системное sys.pdw_exec_requests представление DBCC FREEPROCCACHE добавляется новая строка.

Примеры: SQL Server

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

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

Затем значение дескриптора плана из результирующего набора вставляется в инструкцию DBCC FREEPROCACHE для удаления из кэша планов именно этого плана.

USE AdventureWorks2022;
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 row(s) affected)
-- 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

Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)

Г. Базовый синтаксис DBCC FREEPROCCACHE

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

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

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

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE);

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

Д. Предоставление разрешения на запуск DBCC FREEPROCCACHE

В следующем примере предоставляется разрешение на вход David для запуска DBCC FREEPROCCACHE.

GRANT ALTER SERVER STATE TO David;
GO

См. также