Cuando SQL Server recibe una consulta, el Query Optimizer analiza diferentes alternativas y selecciona un plan de ejecución.
El plan permite visualizar:
SQL Server permite analizar tanto el Estimated Execution Plan como el Actual Execution Plan.
El Actual Execution Plan es especialmente útil porque permite comparar lo que SQL Server esperaba hacer con lo que realmente ocurrió.
Al analizar un plan buscamos detectar:
La pregunta principal es:
¿SQL Server está haciendo más trabajo del necesario?
SQL Server puede utilizar diferentes estrategias:
No existe un JOIN “bueno” o “malo”.
Por ejemplo:
El plan permite determinar qué estrategia eligió SQL Server y analizar si es adecuada para el volumen de datos que realmente está procesando.
El plan permite identificar si SQL Server utiliza:
Un caso clásico es:
Index Seek
↓
Key Lookup
↓
Clustered Index
Si el Key Lookup se ejecuta cientos de miles de veces, puede convertirse en un problema.
Una posible solución puede ser crear un índice que incluya las columnas necesarias.
Un punto fundamental es comparar:
Estimated Rows
Actual Rows
Si SQL Server estima:
100 rows
pero realmente procesa:
2.000.000 rows
el Optimizer pudo haber tomado una decisión incorrecta debido a una estimación de cardinalidad deficiente.
Esto puede llevar a investigar:
SQL Server puede ejecutar determinadas consultas utilizando múltiples threads.
El plan permite identificar operadores de Parallelism.
El tuning puede involucrar:
También es posible influir explícitamente sobre determinadas decisiones del Optimizer, por ejemplo:
Los hints deben utilizarse como una herramienta controlada y no como sustituto de la corrección de estadísticas, índices o SQL.
SQL Server permite forzar un plan de ejecución determinado y mantenerlo asociado a una consulta.
Esto es especialmente útil cuando:
De esta manera podemos estabilizar temporalmente el comportamiento de una consulta mientras se busca una solución definitiva.
El concepto es:
Plan eficiente
↓
Regresión
↓
Nuevo plan menos eficiente
↓
Forzar plan conocido
↓
Performance estabilizada
Dependiendo del problema podemos:
Después se genera nuevamente el Actual Execution Plan y se comparan los resultados.
El objetivo es que SQL Server:
lea menos → procese menos → utilice menos CPU/I/O → responda más rápido.
El Execution Plan permite entender por qué SQL Server eligió determinada estrategia y dónde podemos intervenir para mejorarla.