¿Cómo puedo borrar el caché de consultas de SQL Server?

Resuelto PaulB asked hace 14 años • 5 respuestas

Tengo una consulta simple ejecutándose en SQL Server 2005.

SELECT * 
FROM Table 
WHERE Col = 'someval'

La primera vez que ejecuto la consulta puede tardar > 15 secs. Las ejecuciones posteriores están nuevamente en < 1 sec.

¿Cómo puedo hacer que SQL Server 2005 no utilice ningún resultado almacenado en caché? he intentado correr

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Pero esto parece no tener ningún efecto en la velocidad de consulta (todavía < 1 sec).

PaulB avatar Dec 09 '09 17:12 PaulB
Aceptado

Aquí hay una buena explicación. compruébalo.

http://www.mssqltips.com/tip.asp?tip=1360

CHECKPOINT; 
GO 
DBCC DROPCLEANBUFFERS; 
GO

Del artículo vinculado:

Si todas las pruebas de rendimiento se realizan en SQL Server, el mejor enfoque puede ser emitir un CHECKPOINT y luego emitir el comando DBCC DROPCLEANBUFFERS. Aunque el proceso CHECKPOINT es un proceso interno automático del sistema en SQL Server y ocurre de forma regular, es importante emitir este comando para escribir todas las páginas sucias de la base de datos actual en el disco y limpiar los buffers. Luego se puede ejecutar el comando DBCC DROPCLEANBUFFERS para eliminar todos los buffers del grupo de buffers.

Saar avatar Dec 09 '2009 10:12 Saar

Ocho formas diferentes de borrar el caché del plan

1. Eliminar todos los elementos del caché del plan para toda la instancia.

DBCC FREEPROCCACHE;

Úselo para borrar el caché del plan con cuidado. Liberar la memoria caché del plan hace que, por ejemplo, se vuelva a compilar un procedimiento almacenado en lugar de reutilizarse desde la memoria caché. Esto puede provocar una disminución repentina y temporal en el rendimiento de las consultas.

2. Vacíe la caché del plan para toda la instancia y suprima el mensaje de finalización habitual.

"La ejecución de DBCC se completó. Si DBCC imprimió mensajes de error, comuníquese con el administrador del sistema".

DBCC FREEPROCCACHE WITH NO_INFOMSGS;

3. Vacíe la caché del plan preparado y ad hoc para toda la instancia.

DBCC FREESYSTEMCACHE ('SQL Plans');

4. Vacíe la caché del plan preparado y ad hoc para un grupo de recursos.

DBCC FREESYSTEMCACHE ('SQL Plans', 'LimitedIOPool');

5. Vacíe todo el caché del plan para un grupo de recursos.

DBCC FREEPROCCACHE ('LimitedIOPool');

6. Elimine todos los elementos del caché del plan para una base de datos (no funciona en SQL Azure)

-- Get DBID from one database name first
DECLARE @intDBID INT;
SET @intDBID = (SELECT [dbid] 
                FROM master.dbo.sysdatabases 
                WHERE name = N'AdventureWorks2014');

DBCC FLUSHPROCINDB (@intDBID);

7. Borrar la caché del plan para la base de datos actual.

USE AdventureWorks2014;
GO
-- New in SQL Server 2016 and SQL Azure
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;

8. Eliminar un plan de consulta del caché.

USE AdventureWorks2014;
GO

-- Run a stored procedure or query
EXEC dbo.uspGetEmployeeManagers 9;

-- Find the plan handle for that query 
-- OPTION (RECOMPILE) keeps this query from going into the plan cache
SELECT cp.plan_handle, cp.objtype, cp.usecounts, 
DB_NAME(st.dbid) AS [DatabaseName]
FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st 
WHERE OBJECT_NAME (st.objectid)
LIKE N'%uspGetEmployeeManagers%' OPTION (RECOMPILE); 

-- Remove the specific query plan from the cache using the plan handle from the above query 
DBCC FREEPROCCACHE (0x050011007A2CC30E204991F30200000001000000000000000000000000000000000000000000000000000000);
 

Fuente 1 2 3

Somnath Muluk avatar Sep 15 '2017 06:09 Somnath Muluk