2010-03-31 12 views
11

Estoy tratando de comprender los operadores físicos en los planes de ejecución de SQL Server. Esta página es muy útil:Operadores físicos en los planes de ejecución de SQL Server: ¿qué son revindicaciones, rebobinados y número de ejecuciones?

http://technet.microsoft.com/en-us/library/ms191158.aspx

SSMS 2008 muestra algunas propiedades físicas del operador que no se muestran en SSMS 2005: Estimated Number of Executions y Number of Executions. Pero, ¿qué significan realmente estos, y cómo se relacionan con revinculación y rebobinado?

Estimated Number of Executions es particularmente interesante porque no parece estar almacenado en el XML. Entonces, ¿cómo se calcula? Parece ser igual a Estimated Rebinds + Estimated Rewinds + 1.0. Pero si ese es el caso, ¿por qué Number of Executions no es igual a Actual Rebinds + Actual Rewinds + 1?

Gracias.

+0

Esto se explica bien en "Optimización y optimización de consultas internas de Microsoft SQL Server 2005" Capítulo 3 –

+2

Puede explicarse en ese libro en particular, pero no todo el mundo tiene una copia del libro disponible y/o quiere comprarlo en Amazon . –

+1

@moontear - ¡Afortunado que el capítulo está disponible como descarga gratuita del [sitio complementario de "SQL Server 2008 Internals"] (http://www.sqlserverinternals.com/companion/)! –

Respuesta

7

El libro está un poco apagado en esa descripción. Rewind y Rebind solo se aplican dentro de una unión de bucle. Se refieren al uso de los valores de la sonda desde la parte exterior del bucle hasta la parte interna del bucle y solo se reflejan en ciertos operadores (que son costosos, por lo que vale la pena saber con qué frecuencia se los retira). Rebinds and Rewinds debe correlacionarse directamente con el número de ejecuciones, no con el número + 1.

El número de ejecuciones, estimadas o reales, es el número de veces que se llama al operador. Esto puede verse afectado por muchas cosas. Por ejemplo, en una combinación de bucles, verá múltiples llamadas a los operadores en la bifurcación externa que corresponden directamente al número de filas en la bifurcación interna. Verá absolutamente las diferencias entre lo real y lo estimado.En el caso de un bucle (gran ejemplo para mejorar) verá un valor estimado de uno en el bucle interno, pero el número real de ejecuciones será, como ya se dijo, igual al número de filas en el exterior.

+0

'Rebobinar y volver a vincular solo son aplicables dentro de una unión de bucle '¿no son aplicables también para ciertos carretes? (Los spool spools son específicos) – Akash

4

Le recomiendo que lea (y/o descargue) el eBook SQL Server Execution Plans de Grant Fritchey. La descarga parece ser gratis.

Hay una sección sobre rebinds y rebobina. No soy un experto en esto, así que solo cito la línea inferior del capítulo correspondiente:

Entonces, ¿cómo es esto útil para el DBA? En términos generales, es ideal si los recuentos de reenlace y retroceso son lo más bajos posibles, ya que los recuentos más altos indican más E/S de disco. Si los recuentos son altos, puede indicar que un operador particular está trabajando más de lo necesario, perjudicando el rendimiento del servidor . Si este es el caso, podría ser posible reescribir la consulta , o modificar la indexación actual, para usar un plan de consulta diferente que use menos revindicaciones y rebobinado, reduciendo las E/S y aumentando el rendimiento. (. P 83)

El número de ejecuciones es un indicador de nivel superior para el número de reenlaces y rebobina. Aquí otra cita:

en cuenta que, a diferencia de los planes de texto, que solo muestran EstimateExecutions, el plan XML el número estimado de revinculaciones y rebobina. Esto a menudo puede darle una idea más precisa de lo que ocurrió dentro de la consulta, como muchas veces que se ejecutó el operador. (p.103)

Cuestiones relacionadas