Hay algunas maneras de asegurar la recompilación de un procedimiento almacenado:
- usando
WITH RECOMPILE
,
- haciendo que el procedimiento almacenado dinámico (piensa
exec()
)
- marcando el proc de recompilación con
sp_recompile
.
- cambiar el esquema de que un plan de consulta almacenado en caché se basa en
- llamando
DBCC FREEPROCCACHE
- A nivel de consulta una declaración individual dentro de un proc puede volver a compilar con la sugerencia de consulta RECOMPILE (SQL 2008).
Factores en la Recopilación
Además de las duras factores mencionados anteriormente, lo que hace que recompilación del procedimiento almacenado? Bueno, muchas cosas. Algunos de estos están entretejidos con la lista anterior, pero quiero volver a presentarlos b/c, puede que no sea obvio.
- inserción o eliminación de una gran cantidad de datos (densidad de datos en los índices & tablas menudo controla los planes de consulta)
- volver a generar índices (un cambio a los objetos subyacentes)
- crear/eliminar tablas temporales (de nuevo, que generan cambios DML)
- edades plan de consulta fuera (no creo utilizados recientemente y sql quieren de para limpiar el uso de memoria)
Esto es de ninguna manera una lista exhaustiva. El optimizador de consultas evoluciona y sorprende sin importar cuánto tiempo haya estado usando SQL Server. Pero aquí hay algunos recursos que pueden ser de utilidad:
PERO ESPERA HAY MAS !
Dicho esto, la presunción en su pregunta es que las recompilaciones siempre son malas para el rendimiento. De hecho, a menudo la recompliación es buena.
¿Cuándo le gustaría recompilar? Veamos un ejemplo de un proceso que busca por apellido. Los procedimientos almacenados hacen 'parameter sniffing', lo cual es una bendición (si le sirve) y una maldición (si funciona en su contra). Primer pase alguien busca en Zebr%
para zerbrowski. El índice de apellidos se da cuenta de que esto es muy específico y devolverá, digamos, 3 filas de un millón, por lo que se genera un plan de ejecución. Con el procedimiento compilado para un resultado de fila baja, la siguiente búsqueda es para S%
. Bueno, S es su nombre más común y coincide 93.543 filas de 1 millón.
Sí. Ahora, ¿cuál es la pregunta? –
Creo que debes hacer una pregunta específica. –