DBCC FREEPROCCACHE (Transact-SQL)

Se aplica a: síSQL Server (todas las versiones admitidas) SíAzure SQL Database SíInstancia administrada de Azure SQL síAzure Synapse Analytics síAlmacenamiento de datos paralelos

Quita todos los elementos de la memoria caché del plan, quita un plan concreto de la misma especificando un identificador de plan o un identificador SQL, o quita todas las entradas de caché asociadas a un grupo de recursos de servidor especificado.

Nota

DBCC FREEPROCCACHE no borra las estadísticas de ejecución para los procedimientos almacenados compilados de forma nativa. La memoria caché de procedimientos no contiene información sobre los procedimientos almacenados compilados de forma nativa. Las estadísticas de ejecución recopiladas de ejecuciones de procedimientos aparecerán en las DMV de estadísticas de ejecución: sys.dm_exec_procedure_stats (Transact-SQL) y sys.dm_exec_query_plan (Transact-SQL).

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQL

Sintaxis

Sintaxis para SQL Server:

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

Sintaxis para Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW):

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

Nota

Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

( { plan_handle | sql_handle | pool_name } )
plan_handle identifica de forma exclusiva un plan de consulta de un lote que se ha ejecutado y cuyo plan reside en la memoria caché del plan. plan_handle es varbinary(64) y se puede obtener de los siguientes objetos de administración dinámica:

sql_handle es el identificador SQL del lote que se va a borrar. sql_handle es varbinary(64) y se puede obtener de los siguientes objetos de administración dinámica:

pool_name es el nombre de un grupo de recursos del regulador de recursos. pool_name es sysname y se puede obtener consultando la vista de administración dinámica sys.dm_resource_governor_resource_pools.
Para asociar un grupo de cargas de trabajo del regulador de recursos a un grupo de recursos, consulte la vista de administración dinámica sys.dm_resource_governor_workload_groups. Para más información sobre el grupo de cargas de trabajo de una sesión, consulte la vista de administración dinámica sys.dm_exec_sessions.

WITH NO_INFOMSGS
Suprime todos los mensajes de información.

COMPUTE
Purga la memoria caché del plan de consulta de cada nodo de ejecución. Este es el valor predeterminado.

ALL
Purga la memoria caché del plan de consulta de cada nodo de ejecución y del nodo de control.

Nota

Desde SQL Server 2016 (13.x), ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE borra la memoria caché (de plan) de procedimientos de la base de datos en ámbito.

Comentarios

Use DBCC FREEPROCCACHE con precaución para borrar la caché del plan. Borrar la memoria caché (de plan) de procedimientos hace que todos los planes se expulsen y las ejecuciones de consultas entrantes compilarán un nuevo plan, en lugar de volver a usar alguno de los planes previamente almacenados en caché.

Como consecuencia, el rendimiento de las consultas puede disminuir de manera repentina y temporal a medida que el número de compilaciones nuevas vaya aumentando. Para cada almacén de caché borrado de la caché de planes, el registro de errores de SQL Server contendrá el siguiente mensaje informativo:

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.

Este mensaje se registra cada cinco minutos siempre que se vacíe la memoria caché dentro de ese intervalo de tiempo.

Las siguientes operaciones de reconfiguración también borran la caché de procedimientos:

  • access check cache bucket count
  • access check cache quota
  • clr enabled
  • cost threshold for parallelism
  • cross db ownership chaining
  • index create memory
  • max degree of parallelism
  • memoria de servidor máxima
  • max text repl size
  • max worker threads
  • memoria mínima por consulta
  • memoria de servidor mínima
  • query governor cost limit
  • query wait
  • remote query timeout
  • user options

Conjuntos de resultados

Si no se especifica la cláusula WITH NO_INFOMSGS, DBCC FREEPROCCACHE devuelve: "Ejecución de DBCC completada. Si DBCC imprime algún mensaje de error, póngase en contacto con su administrador del sistema."

Permisos

Se aplica a: SQL Server, Sistema de la plataforma de análisis (PDW)

  • Requiere el permiso ALTER SERVER STATE en el servidor.

Se aplica a: Azure Synapse Analytics

  • Requiere pertenencia al rol fijo de servidor DB_OWNER.

Notas generales sobre Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

Se pueden ejecutar varios comandos DBCC FREEPROCCACHE a la vez. En Azure Synapse Analytics o Sistema de la plataforma de análisis (PDW), borrar la memoria caché de plan puede hacer que el rendimiento de las consultas disminuya temporalmente debido a que las consultas compilan un nuevo plan, en lugar de volver a usar alguno de los planes previamente almacenados en caché.

DBCC FREEPROCCACHE (COMPUTE) solo hace que SQL Server vuelva a compilar las consultas cuando se ejecuten en los nodos de ejecución. No hace que Azure Synapse Analytics o Sistema de la plataforma de análisis (PDW) vuelvan a compilar el plan de consulta paralelo que se genera en el nodo de control. DBCC FREEPROCCACHE se puede cancelar durante su ejecución.

Limitaciones y restricciones de Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

DBCC FREEPROCCACHE no se puede ejecutar dentro de una transacción. DBCC FREEPROCCACHE no se admite en una instrucción EXPLAIN.

Metadatos de Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

Cuando DBCC FREEPROCCACHE se ejecuta, se agrega una fila nueva a la vista del sistema sys.pdw_exec_requests.

Ejemplos: SQL Server

A. Borrar un plan de consulta de la memoria caché del plan

En el ejemplo siguiente se especifica el identificador de plan de consulta para borrar el plan de consulta de la caché del plan. Para asegurarse de que la consulta del ejemplo está en la caché del plan, la consulta se ejecuta primero. Se consultan las vistas de administración dinámicas sys.dm_exec_cached_plans y sys.dm_exec_sql_text para obtener el identificador de plan de la consulta.

A continuación, el valor del identificador de plan del conjunto de resultados se inserta en la instrucción DBCC FREEPROCACHE para borrar únicamente dicho plan de la memoria caché del plan.

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  

El conjunto de resultados es el siguiente:

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

B. Borrar todos los planes de la memoria caché del plan

En el ejemplo siguiente se borran todos los elementos de la memoria caché del plan. La cláusula WITH NO_INFOMSGS se especifica para que no se muestre el mensaje informativo.

DBCC FREEPROCCACHE WITH NO_INFOMSGS;  

C. Borrar todas las entradas de caché asociadas a un grupo de recursos

En el ejemplo siguiente se borran todas las entradas de caché asociadas a un grupo de recursos de servidor especificado. Primero, se consulta la vista sys.dm_resource_governor_resource_pools para obtener el valor de pool_name.

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

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

D. Ejemplos de sintaxis básica de DBCC FREEPROCCACHE

En el siguiente ejemplo se quitan todas las memorias caché de plan de consulta existentes de los nodos de ejecución. Aunque el contexto está establecido en UserDbSales, se quitarán las memorias caché de plan de consulta de nodo de ejecución de todas las bases de datos. La cláusula WITH NO_INFOMSGS impide que se muestren mensajes informativos en los resultados.

USE UserDbSales;  
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

El siguiente ejemplo tiene los mismos resultados que el ejemplo anterior, salvo por el hecho de que se muestran mensajes informativos en los resultados.

USE UserDbSales;  
DBCC FREEPROCCACHE (COMPUTE);  

Cuando se solicitan mensajes informativos y la ejecución finaliza correctamente, los resultados de la consulta tendrán una línea por cada nodo de ejecución.

E. Conceder permiso para ejecutar DBCC FREEPROCCACHE

En el siguiente ejemplo se da permiso al usuario David para ejecutar DBCC FREEPROCCACHE.

GRANT ALTER SERVER STATE TO David; 
GO

Consulte también

DBCC (Transact-SQL)
Regulador de recursos
ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)