2009-12-06 11 views
16

Solo una pregunta general:¿Cómo se informa al servidor SQL que no se debe usar el caché en las consultas?

¿Existe una consulta/comando que pueda pasarle a SQL Server para que no use caché al ejecutar una consulta en particular?

Estoy buscando una consulta/comando que pueda establecer en lugar de una configuración. ¿No hay necesidad de hacer esto?

+0

No puedo pensar en una razón por la que quieras hacer esto y nunca lo he visto hecho. ¿Qué estás tratando de arreglar? – jvilalta

+5

Podría ser útil para medir el tiempo promedio necesario para ejecutar una consulta cuando la memoria caché no se puede utilizar. –

+8

@Jvilata -> harías esto cuando quisieras arreglar el rendimiento en bruto para un procedimiento almacenado o una consulta. El momento más lento en que se ejecuta una consulta/sp es cuando se compila por primera vez porque no está almacenado en la memoria caché ... y eso excluye todo lo que la consulta debe hacer/devolver. Entonces, si puede corregir el rendimiento de una consulta/sp cuando no ha sido almacenada en la memoria caché, entonces conoce el peor escenario posible para esa consulta (más o menos). –

Respuesta

19
DBCC FREEPROCCACHE 

eliminará todos los planes de ejecución de procedimientos almacenados en caché. Esto provocaría que todas las llamadas a procedimientos posteriores sean recompiladas.

Agregar "WITH RECOMPILE" a una definición de procedimiento provocaría que el procedimiento se vuelva a compilar cada vez que se llamó.

No creo que (en SQL 2005 o anterior) haya ninguna forma de borrar el caché de procedimientos de un único plan de ejecución de procedimientos, y dudo que pueda hacerlo en 2008 tampoco.

+2

Puede eliminar un plan individual utilizando el siguiente SQL. DBCC FREEPROCCACHE [({plan_handle | sql_handle | pool_name})] [WITH NO_INFOMSGS] – Afr

1

uso

WITH RECOMPILE 
16

Si desea forzar una consulta a no utilizar la caché de datos, el mejor enfoque es para borrar la caché antes de ejecutar la consulta:

CHECKPOINT 
DBCC DROPCLEANBUFFERS 

Nota que forzar una recompilación no tendrá ningún efecto sobre la uso de consulta de la memoria caché de datos.

Una razón por la que no se puede simplemente marcar una consulta individual para evitar la caché es que el uso de la memoria caché es una parte integral de la ejecución de la consulta. Si los datos ya están en caché, ¿qué haría SQL Server con los datos si se leen por segunda vez? Sin mencionar los problemas de sincronización, etc.

Cuestiones relacionadas