¿Cómo leo el costo de la consulta y siempre es un porcentaje?


34

Actualmente estoy estudiando para SQL 70-433 (el examen de certificación de Microsoft), y estoy muy confundido acerca de la métrica de rendimiento "costo de consulta".

Según cualquier documentación que pude encontrar a través de Google, el costo de la consulta es una cifra porcentual y representa el porcentaje de todo el lote ocupado por una parte de él. Esto ya me pareció un poco extraño, ya que estoy interesado en el mérito absoluto de una consulta en particular, en lugar de su mérito en relación con otras consultas que aparecen junto a ella.

Pero luego pensé, bueno, tal vez lo que se espera que hagas es hacer dos consultas alternativas una al lado de la otra, ejecutarlas como "un lote", y luego la que tenga un costo menor al 50% es la ganadora.

Pero la discusión sobre el costo de la consulta en el capítulo 6, lección uno del Kit de entrenamiento SQL 70-433 de Microsoft no parece tener ninguna relación con esto.

Aquí hay un ejemplo: Muestran una consulta que contiene dos subconsultas correlacionadas y luego mejoran reemplazando las subconsultas con una APLICACIÓN EXTERNA. El resultado: "Esta consulta tiene un costo de aproximadamente 76, mientras que el costo de la primera consulta fue el doble, alrededor de 151." Luego mejoran aún más la consulta y reducen el costo de 76 a 3.6. No implican que estas cifras sean porcentajes, mientras que implican que son cifras absolutas que se relacionan con la consulta como un objeto independiente, sin referencia a ninguna otra consulta. Y de todos modos, ¿cómo podría la primera consulta tener un costo del 151%?

Más adelante en el capítulo, muestran una captura de pantalla de un plan de ejecución que tiene tres partes. El primero dice "Costo: 0%", el segundo dice "Costo: 1%" y el último dice "Costo: 99%", pero el texto (del libro en sí) debajo de la captura de pantalla "El costo de esta consulta es 0.56" . Supongo que significan algún otro tipo de costo, pero no puedo encontrar referencias a él en otro lado.

Alguien puede ayudar? Estoy completamente confundido


PD Suponiendo que se refieren a algo diferente a los porcentajes que se muestran en los planes de ejecución ... ¿cómo hago para que SSMS me muestre las cifras que están citando? ¿Necesito algo como ESTABLECER TIEMPO ESTADÍSTICAS, pero con algún otro comando que me muestre una cifra de "costo" en la pestaña Mensajes?

Respuestas:


43

El costo de la consulta se informa en los planes de ejecución como "costo estimado del subárbol". Esta es una figura absoluta como 1.5. Conor Cunningham mencionó en una presentación de SQLBits que originalmente se refería a la cantidad de segundos que se tarda en ejecutar en la máquina de un empleado particular de Microsoft ( "Nick's Machine" ) en el servidor SQL 7 días

ingrese la descripción de la imagen aquí

pero ahora debe interpretarse como una medida sin costo unitario del costo total.

El plan de ejecución es un árbol. A cada iterador en el árbol se le asigna un costo de CPU estimado y un costo de E / S estimado y estos se suman para obtener el costo total (las ponderaciones relativas se pueden ajustar con un par de comandos DBCC no documentados ). El costo estimado del subárbol incluye el costo del iterador en sí y todos sus descendientes. Para ver un ejemplo de las fórmulas de cálculo de costos utilizadas, puede consultar este artículo .

Para determinar el costo estimado de una consulta completa en SSMS, seleccione el iterador raíz (por ejemplo, el SELECTiterador) a la izquierda del plan gráfico y observe esta métrica en la ventana de propiedades de SSMS.

Cuando se ejecutan múltiples consultas (ya sea en el mismo lote o no), el porcentaje se calcula sumando todos estos valores y calculando el porcentaje como cabría esperar.

Debe tener en cuenta que incluso en los planes de ejecución reales, esta cifra de costos se basa en estimaciones y usar esto para comparar los méritos relativos de dos consultas diferentes puede ser lamentablemente incorrecto en los casos en que las estimaciones son inexactas.


Gracias, eso es realmente útil. ¡Y nada obvio! Me pregunto por qué esa cifra no se marca más claramente.

44
Siempre me preguntaba acerca de la unidad de medida, contenta de descubrirlo finalmente. Le he estado explicando a la gente (cómicamente) que es "dólares de SQL". Si el costo de una consulta es 1.0, es como pagar 1 dólar por una taza de café. No es un mal precio. ¿Pagarías $ 300 por una taza? ¡De ninguna manera!
datagod
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.