2010-01-29 15 views
8

He estado escuchando mucho últimamente que debería echar un vistazo al plan de ejecución de mi SQL para juzgar qué tan bien funcionará. Sin embargo, no estoy seguro de dónde comenzar con esta función o qué significa exactamente.¿Qué son los planes de ejecución SQL y cómo pueden ayudarme?

Estoy buscando una buena explicación de lo que hace el plan de ejecución, cuáles son sus limitaciones y cómo puedo utilizarlo o dirigirme a un recurso que sí lo hace.

Respuesta

4

Describe los algoritmos reales que el servidor utiliza para recuperar sus datos.

Una consulta SQL así:

SELECT * 
FROM mytable1 
JOIN mytable2 
ON  … 
GROUP BY 
     … 
ORDER BY 
     … 

, describe lo que se debe hacer, pero no cómo que se debe hacer.

El plan de ejecución muestra cómo: los que se utilizan índices, que se unen a los métodos son elegidos (bucles anidados o combinación hash o combinación de mezcla), cómo los resultados se agrupan (usando clasificación o hash), la forma en que se ordenan etc. .

Desafortunadamente, incluso modernas SQL motores no puede encontrar automáticamente los planes óptimos para las consultas más o menos complejos, todavía toma un desarrollador SQL reformular las consultas para que sean performant (incluso hacen lo que hace la consulta original).

Un ejemplo clásico sería también estas consultas:

SELECT (
     SELECT COUNT(*) 
     FROM mytable mi 
     WHERE mi.id <= mo.id 
     ) 
FROM mytable mo 
ORDER BY 
     id 

y

SELECT RANK() OVER (ORDER BY id) 
FROM mytable 

, que hacen lo mismo y en teoría deberían ser ejecutados utilizando los mismos algoritmos.

Sin embargo, ningún motor real optimizará la consulta anterior para implementar los mismos algoritmos, i. mi. almacenar un contador en una variable e incrementarlo.

Hará lo que se le dice que haga: contar las filas una y otra vez.

Para optimizar las consultas que necesita para ver realmente lo que está sucediendo detrás de escena, y eso es lo que los planes de ejecución le muestran.

Es posible que desee leer este artículo en mi blog:

1

Una forma de facilitar esto, es simplemente mediante el uso de "Ctrl L" (Consulta | Mostrar plan de ejecución estimado) para algunas de sus consultas, en SQL Management Studio.

Esto dará como resultado que se muestre una vista gráfica del plan de ejecución, que, al principio, es más fácil de "decodificar" que la versión de texto del mismo.

planes de consulta en una pequeña pocas palabras:
En esencia, el plan de consulta que muestren el camino de SQL Server tiene la intención de utilizar en la resolución de una consulta.
De hecho, hay muchas opciones, incluso con consultas simples.
Por ejemplo cuando se trata de un JOIN, hay que decidir si recorrer las filas [filtradas] de "tabla A" y buscar las filas de "tabla B", o bien recorrer primero "tabla B" (este es un ejemplo simplificado, ya que hay muchos otros trucos que se pueden utilizar al tratar con JOINs). Normalmente, SQL calculará el número de filas [filtradas] que generará cualquiera de las tablas y elegirá la que tenga el recuento más pequeño para el bucle externo (ya que reducirá el número de búsquedas en la otra tabla)
Otro ejemplo, es decidir qué índices usar (o no usar).

Hay muchos recursos en línea, así como libros que describen los planes de consulta en más detalle, la dificultad es que la optimización del rendimiento SQL es un problema muy amplio y complejo, y muchos de esos recursos tienden a entrar en demasiados detalles para el principiante; Primero es necesario comprender los principios y estructuras fundamentales que subyacen a SQL Server (la forma en que funcionan los índices, la forma en que se almacenan los datos, la diferencia entre índices agrupados y montones ...) antes de sumergirse en muchos de los detalles [importantes] de optimización de consultas Es un poco como el béisbol: primero necesitas conocer las reglas antes de entender todos los conceptos sutiles [e importantes] relacionados con la estrategia del juego.

Consulte este relacionado SO Question para obtener punteros adicionales.

2

Here y Here son algunos artículo echar un vistazo. Los planes de ejecución le permiten identificar el área que consume mucho tiempo y, por lo tanto, le permite mejorar su consulta.

0

es una parte muy importante del conocimiento. Y recomiendo encarecidamente cursos de capacitación especiales sobre eso. En cuanto a mí después de pasar semanas en los cursos que impulsó el rendimiento de las consultas de alrededor de 1000 veces (nostalgia)

1
  1. un plan de ejecución muestra exactamente cómo SQL Server procesa una consulta
  2. que se produce como parte de la optimización de la consulta proceso que SQL Server hace. No es algo que crees directamente.
  3. mostrará qué índices ha decidido usar mejor, y básicamente es un plan sobre cómo SQL Server procesa una consulta
  4. El optimizador de consultas tomará una consulta, la analizará y posiblemente generará una cantidad de diferentes planes de ejecución. Es un proceso de optimización basado en los costos, y elegirá el que se sienta mejor.
  5. una vez que se ha generado un plan de ejecución, irá a la caché del plan para que las llamadas subsiguientes para esa misma consulta puedan reutilizar el mismo plan otra vez para evitar tener que rehacer el trabajo para crear un plan.
  6. Los planes de ejecución se eliminan automáticamente de la memoria caché, según su valor (los planes de bajo valor se eliminan antes de los planes de alto valor para proporcionar la máxima ganancia de rendimiento)
  7. planes de ejecución lo ayudan a detectar problemas de rendimiento, como dónde están los índices falta
0

El plan de ejecución muestra cómo la base de datos está buscando, ordenando y filtrando los datos necesarios para su consulta.

Por ejemplo:

SELECT 
    * 
FROM 
    TableA 
INNER JOIN 
    TableB 
ON 
    TableA.Id = TableB.TableAId 
WHERE 
    TableB.TypeId = 2 
ORDER BY 
    TableB.Date ASC 

resultaría en un plan de ejecución que muestra la base de datos de obtener registros de la Tabla A y la Tabla B, adecuación a satisfacer la unión, filtrando para satisfacer el WHERE y la clasificación para satisfacer el ORDER BY.

A partir de esto, puede averiguar qué es lo que está ralentizando la consulta, si sería beneficioso revisar sus índices o si puede acelerar las cosas de otra manera.

Cuestiones relacionadas