Compartir a través de


DBCC FREEPROCCACHE (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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 ]
[;]

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 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

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. 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

Consulte también