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


DBCC FREEPROCCACHE (Transact-SQL)

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform 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 и Analytics (PDW):

DBCC FREEPROCCACHE [ ( COMPUTE | ALL ) ]
     [ 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 представляет имя пула ресурсов 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

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

СРЕДА ВЫПОЛНЕНИЯ ПРИЛОЖЕНИЙ

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

ВСЕ

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

Примечание.

Начиная с 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

В База данных SQL Azure действует на экземпляре ядра СУБД, 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 и Analytics (PDW)

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

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

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

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

Ограничения и ограничения для системы платформы Azure Synapse Analytics и Analytics (PDW)

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

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

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

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

Примеры: SQL Server

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

В следующем примере план запроса очищается из кэша планов путем указания дескриптора плана запроса. Чтобы обеспечить наличие запроса-образца в кэше планов, сначала выполните следующий запрос. Динамические административные представления 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

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

В следующем примере из кэша планов удаляются все элементы. Предложение 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)

D. Базовый синтаксис 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

См. также