DBCC FREEPROCCACHE (Transact-SQL)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
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).
Convenciones de sintaxis de Transact-SQL
Sintaxis
Sintaxis de SQL Server y Azure SQL Database:
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 ]
[;]
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:
- sys.dm_exec_cached_plans
- sys.dm_exec_requests
- sys.dm_exec_query_memory_grants
- sys.dm_exec_query_stats
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:
- sys.dm_exec_query_stats
- sys.dm_exec_requests
- sys.dm_exec_cursors
- sys.dm_exec_xml_handles
- sys.dm_exec_query_memory_grants
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
se puede usar para borrar la memoria caché de procedimientos (del plan) de la base de datos actual.
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
En Azure SQL Database, DBCC FREEPROCCACHE
actúa en la instancia del motor de base de datos que hospeda la base de datos actual o el grupo elástico. La ejecución de DBCC FREEPROCCACHE
en una base de datos de usuario borra la memoria caché del plan de esa base de datos. Si la base de datos está en un grupo elástico, también borra la memoria caché del plan en todas las demás bases de datos de ese grupo elástico. La ejecución del comando en la base de datos master
no tiene ningún efecto en otras bases de datos del mismo servidor lógico. La ejecución de este comando en una base de datos que usa el objetivo de servicio Básico, S0 o S1 puede quitar memoria caché del plan en otras bases de datos que usen estos objetivos de servicio en el mismo servidor lógico.
Conjuntos de resultados
Cuando no se especifica la cláusula WITH NO_INFOMSGS
, DBCC FREEPROCCACHE
devuelve lo siguiente:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
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 SQL Database
- Requiere la pertenencia al rol de servidor ##MS_ServerStateManager##.
Se aplica a: Azure Synapse Analytics
- Requiere pertenencia al rol fijo de servidor db_owner.
Comentarios para Azure Synapse Analytics y Analytics Platform System (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 Analytics Platform System (PDW) vuelvan a compilar el plan de consulta paralelo que se genera en el nodo de control.
DBCC FREEPROCCACHE
se puede cancelar durante la ejecución.
Limitaciones y restricciones de Azure Synapse Analytics y Analytics Platform System (PDW)
DBCC FREEPROCCACHE
no se puede ejecutar dentro de una transacción.
Una instrucción EXPLAIN no admirte DBCC FREEPROCCACHE
.
Metadatos de Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)
Se agrega una nueva fila a la vista del sistema sys.pdw_exec_requests
cuando se ejecuta DBCC FREEPROCCACHE
.
Ejemplos: SQL Server
A. Borrado de un plan de consulta de la caché de planes
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 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
Este es el conjunto de resultados.
plan_handle text
-------------------------------------------------- -----------------------------
0x060006001ECA270EC0215D05000000000000000000000000 SELECT * FROM Person.Address;
(1 row(s) affected)
-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO
B. Borrado de 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. Borrado de 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. 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. Concesión de permisos para ejecutar DBCC FREEPROCCACHE
En el siguiente ejemplo se concede permiso al inicio de sesión David
para ejecutar DBCC FREEPROCCACHE
.
GRANT ALTER SERVER STATE TO David;
GO