Parámetro Sniffing (o Spoofing) en SQL Server

Hace un tiempo tuve una consulta que corrí bastante para uno de mis usuarios. Todavía estaba evolucionando y ajustándose, pero finalmente se estabilizó y se ejecutó con bastante rapidez, por lo que creamos un procedimiento almacenado a partir de él.

Hasta ahora, tan normal.

El procedimiento almacenado, sin embargo, fue perro lento. No hubo diferencia material entre la consulta y el proceso, pero el cambio de velocidad fue masivo.

[Fondo, estamos ejecutando SQL Server 2005]

Un DBA local amigable (que ya no trabaja aquí) echó un vistazo al procedimiento almacenado y dijo "parodia de parámetros". (Editar: aunque parece que posiblemente también se conoce como 'parámetro sniffing', lo que podría explicar la escasez de éxitos de Google cuando intenté buscarlo.)

Resumimos parte del procedimiento almacenado a un segundo, envolvimos la llamada a este nuevo proceso interno en el proceso externo preexistente, llamado el externo y, bueno, fue tan rápido como la consulta original.

Entonces, ¿qué da? ¿Alguien puede explicar la suplantación de parámetros?

Bono de crédito por

resaltando como evitarlosugiriendo como reconocer una posible causadiscutir estrategias alternativas, por ej. Estadísticas, índices, claves, para mitigar la situación.

Respuestas a la pregunta(8)

Su respuesta a la pregunta