Esta pregunta no se trata tanto de encontrar una solución como de obtener una explicación para el comportamiento bizarrest que he visto desde SQL Server.Rendimiento del procedimiento almacenado: ¿esto es SALVAJE?
I tenían un procedimiento almacenado con la firma siguiente:
alter procedure MySP @param1 uniqueidentifier,
@param2 uniqueidentifier,
@param3 uniqueidentifier
Dado un cierto conjunto de parámetros, este proc estaba tomando un tiempo muy largo para funcionar de C# (usando SqlCommand.ExecuteReader()
) - aproximadamente 2 minutos. Usando los mismos parámetros en una sesión de consulta directa, el SP se ejecutó en menos de 2 segundos.
que tomó mucho tiempo, y ni siquiera a intentar explicar cómo nos topamos con esta solución, pero esto es lo que hicimos:
Al comienzo de la SP, que declaró el 3 de variables locales y ellas asignada a los valores de los parámetros, así:
declare @param1_copy uniqueidentifier,
@param2_copy uniqueidentifier,
@param3_copy uniqueidentifier
select @param1_copy = @param1,
@param2_copy = @param2,
@param3_copy = @param3
Y luego, en el resto de la SP sustituimos todas las referencias a los parámetros de entrada con las copias locales.
Voila. SP ejecutado en menos de 2 segundos. Y el equipo aquí está desconcertado.
Ahora, señoras y señores, ¿alguien puede explicar este comportamiento?
Increíble. ¡Nos dimos cuenta de la solución de libros de texto sin darnos cuenta! –