DBCC FREEPROCCACHE (Transact-SQL)
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).
Se aplica a: SQL Server (desde SQL Server 2008 hasta la versión actual). |
Convenciones de sintaxis de Transact-SQL
Sintaxis
DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ 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 de tipo varbinary(64) y puede obtenerse a partir 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 de tipo varbinary(64) y puede obtenerse a partir 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 puede obtenerse 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 obtener información sobre el grupo de cargas de trabajo para 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.
Comentarios
Use DBCC FREEPROCCACHE con precaución para borrar la caché del plan. Por ejemplo, al liberar la caché del plan se volverá a compilar un procedimiento almacenado en vez de reutilizarlo desde la caché. Esto causa una disminución repentina y temporal del rendimiento de las consultas. Para cada almacén de caché borrado de la caché del plan, el registro de errores de SQL Server contendrá el siguiente mensaje informativo: "SQL Server ha detectado %d instancias de vaciado del almacén de caché '%s' (parte de la caché del plan) debidas a operaciones 'DBCC FREEPROCCACHE' o 'DBCC FREESYSTEMCACHE'". Este mensaje se registra cada cinco minutos siempre que se vacía la caché dentro de ese intervalo de tiempo.
Conjuntos de resultados
Si no se especifica la cláusula WITH NO_INFOMSGS, se devuelve DBCC FREEPROCCACHE:
"La ejecución de DBCC se ha completado. Si DBCC imprime algún mensaje de error, póngase en contacto con su administrador del sistema."
Permisos
Requiere el permiso ALTER SERVER STATE en el servidor.
Ejemplos
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 para 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. Para que no se muestre el mensaje informativo, se especifica la cláusula WITH NO_INFOMSGS .
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