¿Cómo puedo borrar el 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 ejecuto la consulta puede tomar > 15 secs . Ejecuciones posteriores vuelven en < 1 sec .

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

 DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE 

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

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 CHECKPOINT y luego emitir el comando DBCC DROPCLEANBUFFERS. Aunque el proceso CHECKPOINT es un proceso de sistema interno automático en SQL Server y ocurre de manera 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 búferes. Entonces el comando DBCC DROPCLEANBUFFERS se puede ejecutar para eliminar todos los búferes del grupo de búferes.

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

 OPTION (OPTIMIZE FOR UNKNOWN) 

Entonces tu consulta será así

 select * from Table where Col = 'someval' OPTION (OPTIMIZE FOR UNKNOWN) 
 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 que difiera del actual.

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

Ocho formas diferentes de borrar el caché del plan

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

 DBCC FREEPROCCACHE; 

Use esto para borrar la memoria caché del plan con cuidado. La liberación de la memoria caché del plan provoca, por ejemplo, la recomstackción de un procedimiento almacenado en lugar de su reutilización desde la memoria caché. Esto puede causar una disminución repentina y temporal en el rendimiento de la consulta.

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

“Se completó la ejecución de DBCC. Si DBCC imprimió mensajes de error, comuníquese con el administrador del sistema”.

 DBCC FREEPROCCACHE WITH NO_INFOMSGS; 

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

 DBCC FREESYSTEMCACHE ('SQL Plans'); 

4. Vacíe el caché de plan preparado y preparado para un grupo de recursos

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

5. Vaciar 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 caché de 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 de la memoria 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

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

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

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

Más detalles sobre la caché de procedimientos de SQL Azure aquí