DBCC FREEPROCCACHE (Transact-SQL)DBCC FREEPROCCACHE (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server нетБаза данных SQL Azure даAzure Synapse Analytics (хранилище данных SQL) даParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Удаляет все элементы из кэша планов, удаляет заданный план из кэша планов с помощью указания дескриптора плана или дескриптора SQL либо удаляет все записи кэша, связанные с указанным пулом ресурсов.Removes all elements from the plan cache, removes a specific plan from the plan cache by specifying a plan handle or SQL handle, or removes all cache entries associated with a specified resource pool.

Примечание

DBCC FREEPROCCACHE не очищает статистику выполнения для хранимых процедур, скомпилированных в собственном коде.DBCC FREEPROCCACHE does not clear the execution statistics for natively compiled stored procedures. Кэш процедур не содержит сведения о хранимых процедурах, скомпилированных в собственном коде.The procedure cache does not contain information about natively compiled stored procedures. Все статистические данные выполнения, полученные при выполнении процедур, появятся в динамических административных представлениях (DMV) статистики выполнения: sys.dm_exec_procedure_stats (Transact-SQL) и sys.dm_exec_query_plan (Transact-SQL).Any execution statistics collected from procedure executions will appear in the execution statistics DMVs: sys.dm_exec_procedure_stats (Transact-SQL) and sys.dm_exec_query_plan (Transact-SQL).

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

Синтаксис для SQL Server:Syntax for SQL Server:

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

Синтаксис для хранилища данных SQL Azure и Parallel Data Warehouse:Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse:

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

АргументыArguments

( { plan_handle | sql_handle | pool_name } )( { plan_handle | sql_handle | pool_name } )
plan_handle уникально идентифицирует план запроса для запущенного пакета, план которого хранится в кэше планов.plan_handle uniquely identifies a query plan for a batch that has executed and whose plan resides in the plan cache. Аргумент plan_handle имеет тип varbinary(64) , и его можно получить из следующих объектов DMO:plan_handle is varbinary(64) and can be obtained from the following dynamic management objects:

sql_handle представляет дескриптор SQL очищаемого пакета.sql_handle is the SQL handle of the batch to be cleared. Аргумент sql_handle имеет тип varbinary(64) , и его можно получить из следующих объектов DMO:sql_handle is varbinary(64) and can be obtained from the following dynamic management objects:

pool_name представляет имя пула ресурсов Resource Governor.pool_name is the name of a Resource Governor resource pool. Аргумент pool_name имеет тип sysname и может быть получен с помощью запроса к динамическому административному представлению sys.dm_resource_governor_resource_pools.pool_name is sysname and can be obtained by querying the sys.dm_resource_governor_resource_pools dynamic management view.
Чтобы связать группу рабочей нагрузки Resource Governor с пулом ресурсов, запросите динамическое административное представление sys.dm_resource_governor_workload_groups.To associate a Resource Governor workload group with a resource pool, query the sys.dm_resource_governor_workload_groups dynamic management view. Чтобы получить сведения о группе рабочей нагрузки для сеанса, запросите динамическое административное представление sys.dm_exec_sessions.For information about the workload group for a session, query the sys.dm_exec_sessions dynamic management view.

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

COMPUTECOMPUTE
Очистка кэша планов запросов в каждом вычислительном узле.Purge the query plan cache from each Compute node. Это значение по умолчанию.This is the default value.

ALLALL
Очистка кэша планов запросов в каждом вычислительном узле и в управляющем узле.Purge the query plan cache from each Compute node and from the Control node.

Примечание

Начиная с версии SQL Server 2016 (13.x)SQL Server 2016 (13.x), для очистки кэша процедур (планов) для базы данных в области действия служит инструкция ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE.Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), the ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE to clear the procedure (plan) cache for the database in scope.

RemarksRemarks

Инструкция DBCC FREEPROCCACHE используется для аккуратной очистки кэша планов.Use DBCC FREEPROCCACHE to clear the plan cache carefully. Очистка кэша процедур (планов) приводит к исключению всех планов. В результате при выполнении входящих запросов будет компилироваться новый план, а не использоваться существующий план из кэша.Clearing the procedure (plan) cache causes all plans to be evicted, and incoming query executions will compile a new plan, instead of reusing any previously cached plan.

Это может стать причиной внезапного временного снижения производительности обработки запросов из-за увеличения числа компиляций.This can cause a sudden, temporary decrease in query performance as the number of new compilations increases. Для каждого удаленного хранилища кэша в кэше планов журнал ошибок SQL ServerSQL Server содержит следующее информационное сообщение: "SQL ServerSQL Server обнаружил %d экземпляров, сброшенных на диск хранилищ кэша для хранилища кэша "%s" (части кэша планов) в результате операций DBCC FREEPROCCACHE или DBCC FREESYSTEMCACHE".For each cleared cachestore in the plan cache, the SQL ServerSQL Server error log will contain the following informational message: " SQL ServerSQL 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." Это сообщение добавляется в журнал каждые пять минут при сбросе кэша в течение этого интервала времени.This message is logged every five minutes as long as the cache is flushed within that time interval.

Следующие операции по перенастройке также очищают кэш процедур:The following reconfigure operations also clear the procedure cache:

  • доступ к счетчику контейнеров проверки кэшаaccess check cache bucket count
  • доступ к квоте кэша проверкиaccess check cache quota
  • clr enabledclr enabled
  • стоимостный порог для параллелизмаcost threshold for parallelism
  • cross db ownership chainingcross db ownership chaining
  • память для создания индексаindex create memory
  • максимальная степень параллелизмаmax degree of parallelism
  • max server memorymax server memory
  • max text repl sizemax text repl size
  • максимальное количество рабочих потоковmax worker threads
  • min memory per querymin memory per query
  • min server memorymin server memory
  • ограничение стоимости регулятора запросовquery governor cost limit
  • ожидание запросаquery wait
  • remote query timeoutremote query timeout
  • user optionsuser options

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

Если предложение WITH NO_INFOMSGS не указано, инструкция DBCC FREEPROCCACHE возвращает: "Выполнение DBCC завершено.When the WITH NO_INFOMSGS clause is not specified, DBCC FREEPROCCACHE returns: "DBCC execution completed. Если инструкция DBCC выдает сообщения об ошибках, обратитесь к системному администратору».If DBCC printed error messages, contact your system administrator."

РазрешенияPermissions

Применимо к: SQL ServerSQL Server, Параллельное хранилище данныхParallel Data WarehouseApplies to: SQL ServerSQL Server, Параллельное хранилище данныхParallel Data Warehouse

  • Требует разрешения ALTER SERVER STATE на сервере.Requires ALTER SERVER STATE permission on the server.

Применимо к: Хранилище данных SQLSQL Data WarehouseApplies to: Хранилище данных SQLSQL Data Warehouse

  • Необходимо членство в предопределенной роли сервера DB_OWNER.Requires membership in the DB_OWNER fixed server role.

Общие замечания касательно Хранилище данных SQLSQL Data Warehouse и Параллельное хранилище данныхParallel Data WarehouseGeneral Remarks for Хранилище данных SQLSQL Data Warehouse and Параллельное хранилище данныхParallel Data Warehouse

Несколько команд DBCC FREEPROCCACHE могут выполняться одновременно.Multiple DBCC FREEPROCCACHE commands can be run concurrently. В Хранилище данных SQLSQL Data Warehouse или Параллельное хранилище данныхParallel Data Warehouse очистка кэша планов может приводить к временному снижению производительности обработки запросов, так как для входящих запросов компилируется новый план, а не используется существующий план из кэша.In Хранилище данных SQLSQL Data Warehouse or Параллельное хранилище данныхParallel Data Warehouse, clearing the plan cache can cause a temporary decrease in query performance as incoming queries compile a new plan, instead of reusing any previously cached plan.

Команда DBCC FREEPROCCACHE (COMPUTE) приводит к перекомпиляции запросов сервером SQL ServerSQL Server только в том случае, если они выполняются в вычислительных узлах.DBCC FREEPROCCACHE (COMPUTE) only causes SQL ServerSQL Server to recompile queries when they are run on the Compute nodes. Она не приводит к тому, что Хранилище данных SQLSQL Data Warehouse или Параллельное хранилище данныхParallel Data Warehouse перекомпилируют план параллельных запросов, созданный в управляющем узле.It does not cause Хранилище данных SQLSQL Data Warehouse or Параллельное хранилище данныхParallel Data Warehouse to recompile the parallel query plan that is generated on the Control node. Команду DBCC FREEPROCCACHE можно отменить во время выполнения.DBCC FREEPROCCACHE can be cancelled during execution.

Ограничения для Хранилище данных SQLSQL Data Warehouse и Параллельное хранилище данныхParallel Data WarehouseLimitations and Restrictions for Хранилище данных SQLSQL Data Warehouse and Параллельное хранилище данныхParallel Data Warehouse

Команда DBCC FREEPROCCACHE не может выполняться в рамках транзакции.DBCC FREEPROCCACHE can not run within a transaction. Команда DBCC FREEPROCCACHE не поддерживается в инструкции EXPLAIN.DBCC FREEPROCCACHE is not supported in an EXPLAIN statement.

Метаданные для Хранилище данных SQLSQL Data Warehouse и Параллельное хранилище данныхParallel Data WarehouseMetadata for Хранилище данных SQLSQL Data Warehouse and Параллельное хранилище данныхParallel Data Warehouse

При выполнении команды DBCC FREEPROCCACHE в системное представление sys.pdw_exec_requests добавляется новая строка.A new row is added to the sys.pdw_exec_requests system view when DBCC FREEPROCCACHE is run.

Примеры: SQL ServerSQL ServerExamples: SQL ServerSQL Server

A.A. Очистка плана запроса из кэша плановClearing a query plan from the plan cache

В следующем примере план запроса очищается из кэша планов путем указания дескриптора плана запроса.The following example clears a query plan from the plan cache by specifying the query plan handle. Чтобы обеспечить наличие запроса-образца в кэше планов, сначала выполните следующий запрос.To ensure the example query is in the plan cache, the query is first executed. Динамические административные представления sys.dm_exec_cached_plans и sys.dm_exec_sql_text запрашиваются для возврата дескриптора плана соответствующего запроса.The sys.dm_exec_cached_plans and sys.dm_exec_sql_text dynamic management views are queried to return the plan handle for the query.

Затем значение дескриптора плана из результирующего набора вставляется в инструкцию DBCC FREEPROCACHE для удаления из кэша планов именно этого плана.The plan handle value from the result set is then inserted into the DBCC FREEPROCACHE statement to remove only that plan from the plan cache.

USE AdventureWorks2012;  
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  

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

plan_handle                                         text  
--------------------------------------------------  -----------------------------  
0x060006001ECA270EC0215D05000000000000000000000000  SELECT * FROM Person.Address;  
  
(1 row(s) affected)
-- Remove the specific plan from the cache.  
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);  
GO  

Б.B. Очистка всех планов из кэша плановClearing all plans from the plan cache

В следующем примере из кэша планов удаляются все элементы.The following example clears all elements from the plan cache. Предложение WITH NO_INFOMSGS указывается, чтобы избежать отображения информационного сообщения.The WITH NO_INFOMSGS clause is specified to prevent the information message from being displayed.

DBCC FREEPROCCACHE WITH NO_INFOMSGS;  

В.C. Очистка всех записей кэша, связанных с пулом ресурсовClearing all cache entries associated with a resource pool

В следующем примере очищаются все записи кэша, связанные с указанным пулом ресурсов.The following example clears all cache entries associated with a specified resource pool. Сначала запрашивается представление sys.dm_resource_governor_resource_pools для получения значения аргумента pool_name.The sys.dm_resource_governor_resource_pools view is first queried to obtain the value for pool_name.

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

Примеры: Хранилище данных SQLSQL Data Warehouse и Параллельное хранилище данныхParallel Data WarehouseExamples: Хранилище данных SQLSQL Data Warehouse and Параллельное хранилище данныхParallel Data Warehouse

Г.D. Примеры базового синтаксиса DBCC FREEPROCCACHEDBCC FREEPROCCACHE Basic Syntax Examples

В приведенном ниже примере в вычислительных узлах удаляются все существующие кэши планов запросов.The following example removes all existing query plan caches from the Compute nodes. Хотя задан контекст UserDbSales, кэши планов запросов в вычислительных узлах будут удалены для всех баз данных.Although the context is set to UserDbSales, the Compute node query plan caches for all databases will be removed. Предложение WITH NO_INFOMSGS блокирует появление информационных сообщений в результатах.The WITH NO_INFOMSGS clause prevents informational messages from appearing in the results.

USE UserDbSales;  
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

В следующем примере результаты будут теми же, что и в предыдущем, за исключением того, что в них будут приводиться информационные сообщения.The following example has the same results as the previous example, except that informational messages will show in the results.

USE UserDbSales;  
DBCC FREEPROCCACHE (COMPUTE);  

Если информационные сообщения запрошены и выполнение завершилось успешно, результаты запроса будут содержать одну строку для каждого вычислительного узла.When informational messages are requested and the execution is successful, the query results will have one line per Compute node.

Д.E. Предоставление разрешения на выполнение DBCC FREEPROCCACHEGranting Permission to run DBCC FREEPROCCACHE

В приведенном ниже примере имени для входа David предоставляется разрешение на выполнение DBCC FREEPROCCACHE.The following example gives the login David permission to run DBCC FREEPROCCACHE.

GRANT ALTER SERVER STATE TO David; 
GO

См. также:See Also

DBCC (Transact-SQL)DBCC (Transact-SQL)
Регулятор ресурсовResource Governor
ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)