sql >> Base de Datos >  >> RDS >> Sqlserver

Plan de ejecución de SQL Server:¿qué es y cómo ayuda con los problemas de rendimiento?

Un plan de ejecución de SQL Server es útil para investigar problemas de rendimiento con sus consultas. Los profesionales de las bases de datos a menudo reciben tickets de problemas o quejas de los usuarios de que las consultas se ejecutan con lentitud. Los resultados de las consultas que antes tomaban dos o tres minutos ahora requieren más de 30 minutos. La solución de problemas puede requerir la investigación de áreas como los recursos del servidor (CPU, memoria), estadísticas, rendimiento del disco, bloqueo, interbloqueos e índices. En este artículo, nos centraremos en la función del plan de ejecución de SQL Server para resolver problemas de rendimiento.

¿Qué sucede una vez que envía T-SQL en SQL Server?

Veamos qué sucede una vez que envía una consulta mediante Transact-SQL o T-SQL en SQL Server. Para los usuarios, por supuesto, no hace ninguna diferencia. Los usuarios esperan obtener resultados precisos rápidamente, ya sea consultando la base de datos o buscando en la web.

El flujo de trabajo de alto nivel de una consulta SQL

  1. El usuario se autentica en SQL Server en una aplicación cliente y envía una consulta.
  2. SQL Server analiza la consulta y comprueba si hay errores de sintaxis.
  3. El árbol de análisis se procesa aún más en Algebrizer, que resuelve todos los objetos, tablas y columnas de la consulta. También realiza una comprobación de los tipos de datos de la columna. En caso de cualquier problema, devuelve un error. Algebrizer genera un árbol de proceso de consulta y un hash de consulta. Si el plan de ejecución ya existe, SQL Server usa ese plan en caché y ejecuta la consulta.
  4. Si no existe un plan o el plan está obsoleto, el Optimizador de consultas realiza una optimización completa basada en costos con la ayuda de estadísticas, árbol de procesos de consulta y restricciones. Con base en esas entradas, prepara el plan de ejecución de SQL Server optimizado en costos.
  5. Finalmente, el motor de consulta de SQL Server ejecuta la consulta de acuerdo con el plan de ejecución y devuelve los resultados.

Resumen de un plan de ejecución de SQL Server

Un plan de ejecución de SQL Server ayuda a los profesionales de bases de datos a solucionar problemas de rendimiento de consultas y escribir consultas eficientes. Cuando una consulta tarda mucho tiempo en ejecutarse, el plan de ejecución de SQL Server puede ayudarlo a identificar el punto en el que la consulta consume la mayor cantidad de recursos y tiempo.

Puede usar cualquiera de los siguientes para generar un plan de ejecución:

  1. Estudio de administración del servidor SQL
  2. Azure Data Studio
  3. Generador de perfiles de SQL Server
  4. Eventos extendidos
  5. Vistas de gestión dinámica
  6. Software de supervisión de bases de datos de terceros

Los planes de ejecución generados por el #1 al #5 son similares. El software de supervisión de bases de datos de terceros (n.º 6) proporciona funciones adicionales que utilizan códigos de colores para identificar a los operadores costosos.

SQL Server proporciona planes de ejecución estimados y reales, similares a lo que experimenta cuando necesita reparar su automóvil. Un mecánico inspecciona su vehículo, luego recibe un presupuesto del trabajo basado en sus requisitos, la condición del vehículo y el tiempo aproximado y los materiales que el mecánico cree que requerirá la reparación. Por supuesto, el costo y el tiempo reales pueden diferir, como sucede con los planes de ejecución estimados y reales de SQL Server.

Planes de ejecución estimados

Sin ejecutar la consulta, puede obtener un plan de ejecución estimado (lógico) de SQL Server basado en las estadísticas de SQL Server. En SQL Server Management Studio (SSMS), siga estos pasos:

  1. Resalte la consulta (en caso de que desee el plan de ejecución para una consulta específica).
  2. Haga clic en el botón Mostrar plan de ejecución estimado (atajo de teclado Ctrl + L), como se muestra a continuación.

A veces, SQL Server no puede producir un plan estimado; por ejemplo, si se usa un parámetro sin especificar su valor en la consulta, o si no se declara una tabla temporal.

Plan de ejecución real

Una vez que envíe la consulta a SQL Server, puede obtener un plan de ejecución real que represente los pasos que tomó SQL Server para ejecutar la consulta. Al igual que en el escenario de reparación del vehículo, esto es como la factura real que recibe.

Para obtener el plan de ejecución real, siga los pasos a continuación en SSMS antes de ejecutar la consulta.

  1. Resalte la consulta.
  2. Haga clic en Mostrar plan de ejecución real botón (método abreviado de teclado Ctrl + M ), como se muestra arriba.

Formatos del plan de ejecución de SQL Server

De forma predeterminada, los procedimientos de SSMS explicados anteriormente generan un plan de ejecución de SQL Server en formato gráfico. Pero tienes la opción de ver los planes de ejecución en tres formatos diferentes:

  1. Gráfica
  2. XML
  3. Texto

Veamos cada uno de esos formatos.

1. Plan de ejecución gráfico

El plan gráfico muestra todos los componentes, incluido el flujo de datos, como se muestra a continuación.

Operadores

Los operadores se muestran como iconos. Cada operador está designado para realizar una tarea específica. Por ejemplo, el optimizador de consultas en SQL Server podría realizar una exploración de tabla, una exploración de índice y una búsqueda. Así es como se ve un operador de búsqueda de índice agrupado cuando extrae datos de un índice en la tabla [AdventureWorks2019].[HumanResources]:

Coste porcentual

El plan gráfico también muestra un costo porcentual (aquí, 99 % para la búsqueda de índice agrupado) asociado con el operador. Ese costo es relativo a los otros operadores utilizados para ejecutar la consulta.

Flechas de flujo de datos

Las flechas conectan a los operadores, su ancho refleja la cantidad de filas de datos que se mueven de un operador al siguiente.

Por ejemplo, suponga que su consulta genera solo una fila de resultados, pero tarda mucho tiempo en completarse. Moviendo el mouse a la flecha de flujo de datos en el plan de ejecución, encontrará que el número de filas leídas es de millones. Eso representa un gran desequilibrio en la utilización de recursos y revela un área que necesita optimización.

Información sobre herramientas

Como se muestra a continuación, cuando pasa el mouse sobre un operador, aparece información sobre herramientas con más estadísticas sobre el flujo de datos.

Ventana de propiedades

La ventana Propiedades muestra información detallada sobre los operadores y sus componentes. Este es un superconjunto de la información sobre herramientas.

2. Plan de ejecución de SQL Server con formato XML

El plan de ejecución XML está en un formato estructurado específico. Aunque el formato XML es visualmente menos intuitivo, contiene todos los detalles en XML y no requiere pasos adicionales para ver las propiedades y la información sobre herramientas. Puede convertir fácilmente el formato XML a formato gráfico y viceversa.

Para convertir un plan de ejecución gráfico a formato XML, haga clic con el botón derecho en él y seleccione Mostrar plan de ejecución XML. , como se muestra a continuación.

El resultado es el siguiente plan de ejecución estructurado con formato XML.

Los siguientes comandos también generan el plan de ejecución en formato XML:

  • Para el plan estimado:ACTIVAR SHOWPLAN_XML
  • Para el plan actual: ACTIVAR STATISTICS_XML

3. Plan de ejecución de SQL Server con formato de texto

Puede generar el plan de ejecución de varias formas:

  • ACTIVAR SHOWPLAN_TEXT

Este comando genera el estimado plan de ejecución, sin información detallada sobre la ejecución de consultas. Está diseñado para aplicaciones como la utilidad sqlcmd .

  • ACTIVAR SHOWPLAN_ALL

Este comando genera el estimado plan de ejecución, con información detallada sobre todos los operadores y operaciones en formato tabular.

  • ESTABLECER PERFIL DE ESTADÍSTICAS

Este comando genera un plan de ejecución real, después de la ejecución de la consulta, en formato tabular.

¿Por qué los planes de ejecución estimados y reales de SQL Server son diferentes?

Los planes de ejecución estimados y reales son generalmente similares, aunque algunas circunstancias pueden hacer que difieran.

Estadísticas obsoletas

La razón principal de las diferencias entre los planes de ejecución estimados y reales son las estadísticas obsoletas.

El optimizador de consultas utiliza estadísticas para crear un plan de ejecución de consultas rentable y optimizado. Si sus estadísticas no están actualizadas, o si su muestreo de datos no es apropiado, el optimizador de consultas realizará una optimización completa y creará un plan de ejecución basado en información antigua. También puede obtener un plan de ejecución ineficiente que podría generar problemas de rendimiento de consultas.

Las estadísticas obsoletas a veces ocurren cuando los datos cambian con frecuencia y las estadísticas no se actualizan de acuerdo con el mantenimiento del índice.

Plan de ejecución de SQL Server en serie o en paralelo

En tiempo de compilación, el optimizador de consultas crea un plan de ejecución y produce un plan en serie o paralelo según el costo de la consulta y el umbral de costo del paralelismo. Si bien el plan de ejecución puede ser el mismo para los modos serie y paralelo, SQL Server decide entre ellos en función de los recursos y la actividad del servidor.

Estimaciones no válidas

Como se mencionó anteriormente, Algebrizer vincula los nombres de los objetos antes de ejecutar la consulta SQL. Supongamos que especifica que una tabla llamada prueba se CREARÁ en tiempo de ejecución, luego intente generar un plan de ejecución estimado. Como esa tabla no existe, recibirá un mensaje de error, como se muestra a continuación.

Usando el plan de ejecución

En resumen, puede generar un plan de ejecución de SQL Server en formato gráfico, XML y de texto y usarlo para solucionar los problemas de rendimiento de su base de datos.

Los planes de ejecución de consultas son los pasos principales para identificar el flujo de trabajo, los operadores y los componentes de las consultas, de modo que pueda ajustar sus consultas para cualquier posible mejora. Para obtener más información sobre el uso de planes de ejecución, consulte nuestra publicación: Cómo leer y analizar planes de ejecución.