miércoles, 28 de octubre de 2009

with Recompile

Desde hacia días detectaba un procedimiento con un extraño comportamiento, el rendimiento de la consulta era inferior a la ejecución de la consulta directamente. ¿Como puede ser esto?

Como siempre en estos casos recurrí a los foros de internet, rápidamente obtuve una respuesta "parameter sniffing".

Resulta que una de las subconsultas del procedimiento se obtenía de una función que devolvía una tabla, y en este caso no se calcula correctamente el plan de ejecución. Asi que si no se recompila el procedimiento el rendimiento es deficiente, para subsanar este problema se puede añadir la clausula with recompile, obligando a sql-server a preparar cada vez un nuevo plan de ejecución.

El uso de la clausula es como sigue:

create proc dbo.prueba
@id int
with recompile
as
select * from tabla where id = @id

No hay comentarios:

Publicar un comentario