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


Tengo una consulta simple ejecutándose contra SQL Server 2005

SELECT * 
FROM Table 
WHERE Col = 'someval'

La primera vez que ejecute la consulta puede tomar > 15 secs. Las ejecuciones posteriores están de vuelta en < 1 sec.

¿Cómo puedo conseguir que SQL Server 2005 no use 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).

Author: shA.t, 2009-12-09

5 answers

Aquí hay una buena explicación. échale un vistazo.

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 PUNTO de CONTROL y luego emitir el comando DBCC DROPCLEANBUFFERS. Aunque el proceso CHECKPOINT es un proceso interno automático del sistema en SQL Server y se produce de forma regular, es importante emitir este comando para escriba todas las páginas sucias de la base de datos actual en el disco y limpie los búferes. Luego se puede ejecutar el comando DBCC DROPCLEANBUFFERS para eliminar todos los búferes del grupo de búferes.

 237
Author: Saar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-21 11:17:30

Si bien la pregunta es un poco antigua, esto aún podría ayudar. Me estoy topando con problemas similares y el uso de la opción a continuación me ha ayudado. No estoy seguro de si esta es una solución permanente, pero lo está arreglando por ahora.

OPTION (OPTIMIZE FOR UNKNOWN)

Entonces su consulta será así

select * from Table where Col = 'someval' OPTION (OPTIMIZE FOR UNKNOWN)
 9
Author: Tony Basallo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-25 03:08:38
EXEC sys.sp_configure N'max server memory (MB)', N'2147483646'
GO
RECONFIGURE WITH OVERRIDE
GO

El valor que especifique para la memoria del servidor no es importante, siempre y cuando difiera de la actual.

Por cierto, lo que causa la aceleración no es la caché de consultas, sino la caché de datos.

 5
Author: erikkallen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-09 10:56:12

Ocho formas diferentes de borrar la caché del plan

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

DBCC FREEPROCCACHE;

Use esto para borrar cuidadosamente la caché del plan. Liberar la caché del plan causa, por ejemplo, que un procedimiento almacenado se recompile en lugar de reutilizarse desde la caché. Esto puede causar una disminución repentina y temporal en el rendimiento de las consultas.

2. Limpie la caché del plan para toda la instancia y suprima el mensaje de finalización regular

" DBCC ejecución completada. Si DBCC imprimió mensajes de error, póngase en contacto con el administrador del sistema."

DBCC FREEPROCCACHE WITH NO_INFOMSGS;

3. Vaciar la caché de plan ad hoc y preparado para toda la instancia

DBCC FREESYSTEMCACHE ('SQL Plans');

4. Vaciar la caché de plan ad hoc y preparado para un grupo de recursos

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

5. Vaciar toda la caché del plan para un grupo de recursos

DBCC FREEPROCCACHE ('LimitedIOPool');

6. Eliminar todos los elementos de la 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 caché de plan para el actual base de datos

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

8. Eliminar un plan de consulta de la 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

 5
Author: Somnath Muluk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-15 06:53:56

Tenga en cuenta que ni DBCC DROPCLEANBUFFERS; ni DBCC FREEPROCCACHE; son compatibles con SQL Azure / SQL Data Warehouse.

Sin embargo, si necesita restablecer la caché del plan en SQL Azure, puede modificar una de las tablas de la consulta (por ejemplo, simplemente agregue y elimine una columna), esto tendrá el efecto secundario de eliminar el plan de la caché.

Personalmente hago esto como una forma de probar el rendimiento de las consultas sin tener que lidiar con los planes en caché.

Más detalles sobre SQL Azure Procedure Cache aquí

 2
Author: MSC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-19 15:24:56