¿Alguien puede explicar cómo el costo es evaluado en una de Oracle explicar el plan?
Es allí cualquier algoritmo específico para determinar el costo de la consulta?

Por ejemplo: completo análisis de tabla tienen un costo más elevado, el índice de escanear la parte baja de… ¿Cómo Oracle evaluar los casos de full table scan, index range scan, etc.?

Este enlace es el mismo como lo que yo estoy pidiendo: Pregunta acerca de los Costos en Oracle Explicar el Plan de

Pero, ¿puede alguien explicar con un ejemplo, podemos encontrar que el precio de coste por ejecución de explain plan, pero ¿cómo funciona internamente?

InformationsquelleAutor Gaurav Soni | 2012-04-02

3 Comentarios

  1. 6

    Hay muchos, muchos algoritmos específicos para calcular el costo. Mucho más de lo que realmente podría ser discutido aquí. Jonathan Lewis ha hecho un trabajo admirable de caminar a través de cómo el optimizador basado en el costo decide sobre el costo de una consulta en su libro Basado En El Costo De Oracle Fundamentos. Si usted está realmente interesado, que va a ser el mejor lugar para empezar.

    Es una falacia suponer que completa la tabla exploraciones tendrán un costo mayor que, por ejemplo, un índice de exploración. Depende del optimizador las estimaciones del número de filas en la tabla y el optimizador de las estimaciones del número de filas de la consulta devolverá (que, a su vez, depende del optimizador estimaciones de la selectividad de los diferentes predicados), el costo relativo de una lectura secuencial frente a una serie de lectura, la velocidad del procesador, la velocidad del disco, la probabilidad de que los bloques estará disponible en la caché del búfer, la base de datos de la configuración del optimizador, su período de sesiones de la configuración del optimizador, el PARALLEL atributo de las tablas y los índices, y un montón de otros factores (esta es la razón por la que toma un libro y empieza a sumergirse en este tipo de cosas). En general, Oracle preferirán un análisis completo de la tabla si la consulta se va a volver una gran parte de las filas de la tabla y un índice de acceso si la consulta se va a devolver una pequeña fracción de las filas de la tabla. Y «pequeña fracción» es en general mucho menor que el de personas de estimado en un principio– si usted está devolviendo el 20-25% de las filas de una tabla, por ejemplo, es casi siempre mejor con un análisis completo de la tabla.

    Si estás tratando de usar la COST columna en un plan de consulta para determinar si el plan es «bueno» o «malo», usted está probablemente va por el camino equivocado. El COST sólo es válida si el optimizador de la estimación es correcta. Pero la razón más común de que los planes de consulta sería incorrecto es que el optimizador de cálculos son incorrectos (las estadísticas son incorrectos, Oracle estimaciones de selectividad son incorrectos, etc.). Eso significa que si usted ve un plan para una consulta que tiene un costo de 6 y un plan para una versión diferente de la consulta que tiene un costo de 6 millones de dólares, es enteramente posible que el plan que tiene un costo de 6 millones es más eficiente debido a que el plan con el bajo costo es incorrecto suponiendo que algún paso se va a volver 1 fila de más de 1 millón de filas.

    Está mucho mejor servido ignorando el COST columna y se centra en la CARDINALITY columna. CARDINALITY es el optimizador estima que el número de filas que van a ser devueltos en cada paso del plan. CARDINALITY es algo que se puede probar directamente y comparar. Si, por ejemplo, se puede ver un paso en el plan que implica un análisis completo de la tabla con ningún predicados y usted sabe que tiene aproximadamente 100.000 filas, sería preocupante si el optimizador del CARDINALITY estimación fue demasiado alto o demasiado bajo. Si fue estimar la cardinalidad a ser de 100 o de 10.000.000 a continuación, el optimizador casi seguro que sería, ya sea recogiendo la mesa de exploración en error o de alimentación de datos en un paso posterior, donde su costo estimado sea manifiestamente incorrecta conduce a elegir mal el orden de combinación o un mal método de combinación. Y que probablemente indican que las estadísticas sobre la mesa eran incorrectos. Por otro lado, si usted ve que la cardinalidad de las estimaciones en cada paso es razonablemente cercano a la realidad, hay una muy buena probabilidad de que Oracle ha escogido un razonablemente buen plan para la consulta.

    • Entonces, ¿qué exactamente unidad de costo aquí cuando estamos buscando para explicar el plan de
    • El 99% del tiempo, usted debe ignorar el COST columna en un plan de consulta. Si el COST es exacta, el plan de consulta es casi ciertamente correcto. Si usted está buscando un plan de consulta, sin embargo, debe ser con la suposición de que podría no ser la correcta, en cuyo caso no se puede asumir que el optimizador de cálculos eran correctos. Es mucho mejor buscar la CARDINALITY columna que indica el número esperado de filas procesadas por cada paso. Si que es una aproximación razonable de la realidad, del optimizador estimaciones son razonables y el plan debe ser razonable.
    • : ¿Puede por favor explicar esto If that is a reasonable approximation of reality, the optimizer's estimates are reasonable and the plan ought to be reasonable
    • Ampliado mi respuesta.
  2. 1

    Otro lugar para iniciarse en la comprensión de la organización comunal de los algoritmos es este papel por Wolfgang Breitling. Jonathan Lewis del libro es más detallada y más reciente, pero el papel es una buena introducción.

    • :Gracias parece interesante para leer
  3. 1

    En la 9i documentación Oracle producido un authoratative buscando modelo matemático para el costo:

    Cost =  (#SRds * sreadtim + 
               #MRds * mreadtim +  
               #CPUCycles / cpuspeed ) / sreadtim

    donde:

    • #SRDs es el número de bloque único lee
    • #Cdrm es el número de múltiples lecturas de bloque
    • #CPUCycles es el número de Ciclos de la CPU *)
    • sreadtim es el único bloque de tiempo de lectura
    • mreadtim es el multi bloque de tiempo de lectura
    • la velocidad de cpu es la CPU de ciclos por segundo

    Por lo que da una buena idea de los factores que entran en el cálculo de costo. Esta fue la razón por Oracle introdujo la capacidad para recopilar estadísticas del sistema: para proporcionar información precisa de los valores de la velocidad de la CPU, etc

    Ahora vamos a avanzar rápido a el equivalente 11g documentación y nos encontramos con las matemáticas ha sido reemplazado con una somera explicación:

    «Costo de la operación, según lo estimado por el optimizador de consultas de enfoque.
    Costo no se determina de acceso a la tabla de operaciones. El valor de este
    la columna no tiene ningún particular unidad de medida; es simplemente
    un valor ponderado se utiliza para comparar los costos de los planes de ejecución. El valor
    de esta columna es una función de la CPU_COST y IO_COST las columnas».

    Creo que esto refleja el hecho de que cost simplemente no es muy fiable indicador de tiempo de ejecución. Jonathan Lewis ha publicado recientemente una pertinente pedazo de blog. Se muestran dos de apariencia similar consultas; explicar sus planes son diferentes pero tienen idénticos costes. Sin embargo, cuando se trata de tiempo de ejecución de una consulta, se realiza considerablemente más lento que el otro. Leer aquí.

Dejar respuesta

Please enter your comment!
Please enter your name here