Bienvenido a otro artículo de nuestro serie sobre conceptos de SQL Server. En este artículo, estaremos discutiendo los hashes del plan de consulta y su importancia en SQL Server.
Un hash del plan de consulta es un valor hash generado a partir de las operaciones en un plan de ejecución específico. Se utiliza para identificar de manera única un plan de ejecución particular. Aunque es raro, puede haber casos en los que dos planes de ejecución diferentes tengan el mismo hash del plan de consulta debido a colisiones de hash.
Sumergámonos en algunos ejemplos para entender mejor este concepto. Considera la siguiente consulta:
--PostTypeId 3 (publicaciones Wiki en StackOverflow)
SELECT *
FROM Posts
WHERE PostTypeId = 3
En este ejemplo, el hash del plan de consulta es 0xC296E1ED384FC09A. Ahora, modifiquemos ligeramente la consulta:
--PostTypeId 1 (preguntas en StackOverflow)
SELECT *
FROM Posts
WHERE PostTypeId = 1
Aunque el hash de la consulta sigue siendo el mismo (0xF039BCB7AB95E111), el plan de ejecución es diferente y el hash del plan de consulta cambia a 0x25255CFFBD7EC1FD. Esto demuestra que incluso un pequeño cambio en la consulta puede resultar en un plan de ejecución diferente y un hash del plan de consulta diferente.
Por otro lado, ¿qué sucede si cambiamos el parámetro pero el plan de ejecución sigue siendo el mismo? ¿Cambiará el hash del plan de consulta? Descubrámoslo:
--PostTypeId 4 (TagWikiExerpt)
SELECT *
FROM Posts
WHERE PostTypeId = 4
En este caso, el hash de la consulta sigue siendo el mismo que en los ejemplos anteriores (0xF039BCB7AB95E111), pero el hash del plan de consulta es el mismo que en el primer ejemplo (0xC296E1ED384FC09A). Esto indica que aunque la forma del plan de ejecución es la misma, puede haber diferencias en los costos y los valores.
Comprender los hashes del plan de consulta es crucial al analizar problemas de rendimiento e investigar el “parameter sniffing”. Al rastrear y recopilar las consultas más costosas en tu caché de planes a lo largo del tiempo, puedes monitorear los nuevos hashes del plan de consulta en las consultas existentes. Esto puede ayudar a identificar cualquier cambio en los planes de ejecución y optimizar el rendimiento de las consultas.
¡Gracias por leer este artículo! Mantente atento a la próxima y última parte de esta serie, donde discutiremos los “plan handles”.