Você está na página 1de 34

Optimizador Oracle

Integrantes: Roberto porto Martha Morrn Jorge Ariza

Qu es el Optimizador?
La base de datos Oracle utiliza la siguiente arquitectura para el procesamiento de las sentencias SQL que recibe por parte de los usuarios.

El parser, o intrprete, que traduce las sentencias SQL, realizando el Anlisis Sintctico (comprueba la correccin sintctica de las instrucciones SQL) y Semntico (verifica que los objetos utilizados y sus atributos existen y son correctos), a la representacin interna utilizada por Oracle. El optimizador, que utiliza reglas internas y estadsticas de coste para determinar la forma ms eficiente de producir los resultados de la sentencia. La salida del optimizador es un plan ptimo de ejecucin. El generador de fuentes de registros, que recibe el plan ptimo desarrollado por el optimizador, y genera el plan de ejecucin : una sucesin de fuentes de registros estructurados en forma de rbol. El motor de ejecucin de SQL, que recibe el plan de ejecucin y lo ejecuta, extrayendo registros de cada una de las fuentes indicadas, y combinando estos registros, hasta obtener el resultado de la sentencia.

Sus principales componentes son :

Para cada instruccin SQL ejecutada por Oracle, el optimizador puede realizar varias de las siguientes tareas :
1.Evaluacin de expresiones y condiciones : Se evalan expresiones y condiciones que contengan constantes de la forma ms amplia posible 2.Transformacin de Instrucciones : Para instrucciones complejas que contengan, por ejemplo, consultas o subconsultas relacionadas, el optimizador podra transformar la sentencia original en una sentencia con un join equivalente. 3. Eleccin de caminos de acceso : Para cada tabla accedida por la instruccin, el optimizador elige uno o ms de los caminos de acceso disponibles para obtener los datos de la tabla. 4. Eleccin de orden para combinaciones (joins) : Para cada instruccin de combinacin entre ms de dos tablas, el optimizador elige qu par de tablas se unen primero, y qu tabla es combinada con el resultado, y as sucesivamente. 5. Eleccin de mtodos de combinacin (join) : Para cada combinacin, el optimizador escoge el mtodo idneo a usar.

Planes de Ejecucin
Para ejecutar una sentencia SQL, Oracle puede necesitar muchos pasos. En cada uno de estos pasos, o bien se recuperan registros de datos de la base de datos, o bien se prepara a aqulla de alguna manera para que el usuario obtenga la salida de su instruccin. La combinacin de pasos que Oracle usa para ejecutar una instruccin es lo que se denomina Plan de Ejecucin. Un plan de Ejecucin incluye: Una va de acceso para cada tabla a la que accede la instruccin. El orden de la combinacin de las tablas, con el apropiado mtodo de combinacin. Etapas del Plan de Ejecucin Cada etapa del Plan de ejecucin devuelve un grupo de registros que o bien son usados por el siguiente paso, o en l ultimo paso, son devueltos al usuario o aplicacin liberando la instruccin SQL. El grupo de registros devueltos por un paso es conocido como row set, o conjunto de registros. El origen de estos registros puede ser, o bien, la recuperacin desde un determinado objeto de la base de datos, o bien la combinacin de los row sets obtenidos de los pasos anteriores en el plan de ejecucin. El plan de ejecucin forma un rbol. Para procesarlo, el gestor de base de datos ejecuta en primer lugar los pasos correspondientes a las hojas del rbol. Los registros obtenidos se convierten en fuentes de los pasos padre de estos. Despus Oracle realiza estos pasos padre, y as sucesivamente hasta llegar a la raz del rbol. El comando EXPLAIN PLAN El comando EXPLAIN PLAN permite obtener, en forma de tabla, el plan de ejecucin elegido por el optimizador de Oracle para la instruccin SELECT, UPDATE, INSERT y DELETE que se le indique.

Tipos de Optimizacin
El gestor de base de datos Oracle, en sus versiones actuales, tiene dos mtodos de optimizacin: el Optimizador Basado en Reglas (RBO Rule Based Optimizer) y el Optimizador Basado en Costes (CBO Cost Based Optimizer) : El optimizador basado en reglas, que ha sido el principal mtodo de optimizacin de Oracle hasta que el optimizador basado en costes, introducido en la versin 7, ha ido ganando en prestaciones. Se basa en reglas obtenidas heursticamente por Oracle, en base a la experiencia con sucesivas versiones. El optimizador basado en costes, que tiene en cuenta el estado de la base de datos en el momento de la ejecucin de la sentencia, para determinar cul de los planes de ejecucin es ms eficiente. Tambin tiene en cuenta los hints, sugerencias de optimizacin colocadas como comentarios en la instruccin SQL por el programador.

Operaciones del Optimizador


Evaluacin de Expresiones, Condiciones y Constantes
El optimizador realiza una serie de operaciones con la sentencia, transformndola y normalizndola, de manera que sea ms fcil obtener un plan de ejecucin ptimo. Entre estas operaciones est la evaluacin de las expresiones, de las condiciones y de las constantes. Las expresiones constantes son evaluadas durante la optimizacin, de manera que no se tengan que evaluar una y otra vez durante la ejecucin. Esta evaluacin se limita a los trminos de las condiciones, no a las propias condiciones. Por tanto, siempre es preferible pasar todas las expresiones constantes a un lado de la condicin, para que Oracle las evale juntas. Las condiciones IN pueden ser traducidas a mltiples condiciones de igualdad, separadas por operadores OR. Los operadores NOT pueden ser eliminados, mediante la transformacin de la condicin que se niega. Esta transformacin puede implicar la introduccin de nuevas condiciones con operadores NOT, que podran ser optimizadas a su vez. Las condiciones que usan el operador BETWEEN son substituidas por condiciones equivalentes que usen los operadores de comparacin >= y <=. Los operadores ANY y SOME seguidos de una lista de valores, se traducen a condiciones individuales, separadas por operadores OR. Si van seguidos de una subconsultas, se traducen a una condicin EXISTS, con una condicin ms en la subconsulta.

Los operadores ALL seguidos de una lista de valores, se traducen a condiciones individuales separadas por operadores AND. Si van seguidos de una subconsulta, se traducen a operadores ANY, con una condicin contraria en la subconsulta. El operador ANY obtenido podr ser transformado, a su vez. La optimizacin de sub-expresiones comunes, busca partes comunes en condiciones separadas por operadores OR, de manera que puedan ser eliminadas de estas condiciones, y ejecutadas una nica vez. El optimizador puede tener en cuenta las funciones determinsticas (funciones que devuelven siempre el mismo resultado para los mismos parmetros de entrada) para evaluarlas en tiempo de optimizacin, o utilizar resultados almacenados en tiempo de ejecucin. El programador puede usar la palabra clave DETERMINISTIC para indicar que una de las funciones que define es determinstica. El optimizador basado en costes, adems, puede introducir nuevas condiciones obtenidas por

Expansin de predicados : si una vista no es combinable con la sentencia que hace referencia a ella, se puede transformar su sentencia de creacin, mediante la introduccin de las condiciones de la sentencia inicial correspondientes a la vista, dentro de la sentencia de creacin. Consultas compuestas, en consultas simples unidas por operadores : el plan de ejecucin de una consulta compuesta, se transforma en planes de ejecucin paralelos para cada una de las subconsultas, unidos por los correspondientes operadores (UNION, INTERSECT, MINUS).

Transformacin de sentencias
SQL es un lenguaje bastante flexible, se pueden utilizar diferentes caminos para lograr el mismo objetivo. Muchas veces, el optimizador transformar una sentencia en otra que obtenga el mismo resultado, pero sea ms eficiente. Algunas de las transformaciones que aplica el optimizador son : Consultas con operadores OR, en mltiples consultas unidas por UNION : si el optimizador encuentra que separar la sentencia inicial en mltiples sentencias, cada una con una de las condiciones separadas por OR, y despus unirlas mediante el operador UNION, es ms eficiente que la primera opcin. Subconsultas, en combinaciones (joins) : si la transformacin de la subconsulta en una combinacin con la consulta principal asegura el mismo resultado que la consulta inicial, el optimizador puede transformarla y proceder a la optimizacin de la nueva consulta obtenida. Combinaciones con vistas, en combinaciones con sentencias : si se puede substituir la referencia a una vista por la referencia a su sentencia de creacin, e intentar la optimizacin de la nueva sentencia obtenida. No se podr realizar esta substitucin si la vista contiene, en su sentencia de creacin, operadores UNION, INTERSECT, MINUS, CONNECT BY, la seudocolumna ROWNUM, o las funciones de grupo AVG, COUNT, MAX, MIN y SUM. Combinaciones con vistas complejas : si se ha activado la combinacin de vistas complejas, Oracle puede intentar la tranformacin de vistas con funciones de grupo y clusulas GROUP BY.

Mtodos de combinacin de tablas


Los joins son sentencias que devuelven datos de ms de una tabla (o de una nica tabla referenciada varias veces). Un join esta caracterizado por mltiples tablas en la clusula FROM y la relacin entre estas tablas es definida a travs de la condicin WHERE. El optimizador cuenta con varios mtodos para realizar combinaciones entre tablas, y debe elegir entre ellos el ms eficiente. Entre los principales mtodos de join estn : Bucles Anidados (Nested Loop Joins) : el optimizador utiliza este mtodo con conjuntos de datos pequeos, y en el caso de que la condicin de join sea un camino de acceso eficiente para la tabla interior. El optimizador determina cul es la tabla conductora, y ejecuta un bucle accediendo a los registros de esta tabla que cumplan las condiciones de la consulta. Para cada registro de la tabla conductora, se ejecuta un bucle accediendo a la tabla interior, mediante los valores actuales de la tabla conductora. Por tanto, es importante que el camino de acceso a la tabla interior sea muy eficiente. Bucles Anidados Externos (Nested Loop Outer Joins) : en caso de combinaciones externas (outer joins), si se cumplen las condiciones de eleccin de Bucles Anidados, se puede utilizar el mtodo de Bucles Anidados Externos, en el que la tabla conductora es siempre la tabla exterior (mientras que, en el mtodo anterior, se puede elegir a una u otra tabla como tabla conductora).

NESTED LOOP JOINS

Combinaciones Hash (Hash Joins) : este mtodo es usado para enlazar grandes conjuntos de datos, en los que la condicin de join es de igualdad. El optimizador usa la ms pequea de las dos tablas fuentes para construir una tabla hash sobre la clave de join, en memoria. Cuando se recuperan los registros de la tabla ms grande, se examina la tabla hash para encontrar las filas enlazadas en la otra tabla. Esta situacin es ptima cuando la tabla menor es lo suficientemente pequea para caber en la memoria disponible, ya que el coste se limita a una simple lectura del dato de la tabla menor. Sin embargo, si la tabla hash es demasiado grande, el optimizador la divide en varias particiones, que se escriben a diferentes segmentos temporales de disco, que son leidos a medida que son necesitados, lo que disminuye la eficiencia. Combinaciones Hash en Joins Externos (Hash Join Outer Joins) : este mtodo es muy similar al anterior, pero en el caso de combinaciones externas. La tabla conductora es siempre la tabla externa, y se construye la tabla hash sobre ella. Se recorre la tabla interior, comprobando en la tabla hash la existencia de datos en la tabla exterior. Se preservan los registros de la tabla exterior que no tengan equivalente en la interior. Combinaciones Hash (Hash Joins) : este mtodo es usado para enlazar grandes conjuntos de datos, en los que la condicin de join es de igualdad. El optimizador usa la ms pequea de las dos tablas fuentes para construir una tabla hash sobre la clave de join, en memoria. Cuando se recuperan los registros de la tabla ms grande, se examina la tabla hash para encontrar las filas enlazadas en la otra tabla. Esta situacin es ptima cuando la tabla menor es lo suficientemente pequea para caber en la memoria disponible, ya que el coste se limita a una simple lectura del dato de la tabla menor. Sin embargo, si la tabla hash es demasiado grande, el optimizador la divide en varias particiones, que se escriben a diferentes segmentos temporales de disco, que son leidos a medida que son necesitados, lo que disminuye la eficiencia. Combinaciones Hash en Joins Externos (Hash Join Outer Joins) : este mtodo es muy similar al anterior, pero en el caso de combinaciones externas. La tabla conductora es siempre la tabla externa, y se construye la tabla hash sobre ella. Se recorre la tabla interior, comprobando en la tabla hash la existencia de datos en la tabla exterior. Se preservan los registros de la tabla exterior que no tengan equivalente en la interior.

HASH JOINS

HASH JOINS

HASH JOINS

HASH JOINS

HASH JOIN

Se construye una hash table con las filas de la relacin ms pequea R. La funcin hash es basada en el atributo JOIN Luego se recorre la relacin S secuencialmente

Se recorre la relacin S secuencialmente De cada tupla S, usar los valores hash R para cada tupla para probar que la tabla hash de R coinciden con los valores clave Si hay un atributo que coincide, esa es la salida Sino coincide, sigue secuencialmente a la otra tupla.

Combinaciones de Ordenacin y Fusin (Sort Merge Joins) : consisten en una fusin de los dos conjuntos de datos, previamente ordenados por las columnas de la condicin de join. No existe el concepto de tabla conductora o directora. Se utilizan para combinar registros de dos fuentes independientes, especialmente si ya estn ordenados mediante las columnas de la condicin de join, o si la condicin de join incluye algn operador que no sea de igualdad. Enotro caso, es mejor utilizar las combinaciones hash. Existe un mtodo similar, para los outer joins, denominado Sort Merge Outer Joins. Combinaciones Cartesianas (Cartesian Joins) : consisten en la combinacin de dos fuentes de registros, entre las que no hay definida ninguna condicin de join. Su coste es muy elevado, en funcin de los volmenes de las dos fuentes de registros. Combinaciones Externas Completas (Full Outer Joins) : consisten en combinaciones externas en las que se deben preservar los registros de ambas fuentes de datos (usando las palabras clave FULL OUTER JOIN). Anti-Combinaciones (Anti-Joins) : son combinaciones en las que se devuelven los registros de la primera fuente de datos que no cumplen las condiciones impuestas a la segunda fuente (operadores NOT IN con subconsultas NOT EXISTS). Semi-Combinaciones (Semi-Joins) : son combinaciones en las que se devuelven los registros de la primera fuente de datos que cumplen las condiciones impuestas a la segunda fuente (operadores IN con subconsultas EXISTS).

Sort-Merge-Join

Sort-Merge-Join

SORT-MERGE-JOIN

SORT MERGE JOIN

Optimizacin de Sentencias en 'Estrella'


Algunos data warehouse son diseados como esquemas en estrella, lo que incluye una gran tabla de hechos y varias pequeas tablas de dimensiones. En la primera se almacena informacin bsica y en las dems se guarda informacin de atributos de la tabla de hechos. Una consulta en estrella es una unin entre una tabla de hechos y un cierto nmero de tablas de dimensiones, unidas por relaciones clave primaria clave ajena, y sin relacin entre las tablas de dimensiones. El Optimizador Basado en Costes es capaz de identificar este tipo de relacin y de crear un plan de ejecucin eficiente. El Optimizador Basado en Reglas no presenta actividad optimizadora especfica en estos casos. Una tpica tabla de hechos contiene claves y medidas. Por ejemplo la medida Importe de ventas y las claves Fecha, Producto y Mercado (que conectan con las correspondientes tablas de dimensiones). La tabla de hechos tiene, normalmente, un indice concatenado en las columnas de la clave para facilitar este tipo de unin o bien indices independientes para cada columna de la clave.

Cmo especificar el tipo de optimizacin


OPTIMIZADOR

INIT.ORA

Valor=rule

Valor=choose

Cmo especificar el tipo de optimizacin


Mediante la modificacin del parmetro de INIT.ORA denominado OPTIMIZER_MODE, se consigue la determinacin del tipo de optimizacin. Si se da el valor RULE, el optimizador funciona mediante Reglas (RCO). Si se da el valor CHOOSE, el optimizador elegir Costes (CBO), siempre que existan estadsticas sobre las tablas, o se presenten sugerencias (hints) por parte del programadador. Si se ha fijado CHOOSE, pero no existen estadsticas o sugerencias, el Optimizador trabajar por Reglas (RCO). Enfuncin de otros valores del parmetro, se utilizar el CBO enfocado a un determinado objetivo.

Optimizacin basada en costes


Por defecto, el punto fuerte del Optimizador Basado en Costes es la cantidad de datos tratados por segundo, al tiempo que dedica el mnimo de recursos a la solucin de la query. Es decir, se trabaja en dos direcciones: mnimos recursos aplicables, para obtener en el mnimo tiempo el primer registro accedido por la consulta empleada (mnimo tiempo de respuesta). No obstante es posible potenciar, segn la tarea a realizar, una u otra prestacin. Para aplicaciones de tipo batch, como Oracle Reports, es preferible optimizar para la mxima productividad : se disminuye el tiempo total de tarea, no importando tanto el tiempo de respuesta. Para aplicaciones interactivas, como Oracle Forms o consultas en SQL*Plus, optimizar para el mejor tiempo de respuesta. El CBO determina cul de los planes de ejecucin es mas eficiente, teniendo en cuenta los caminos de acceso disponibles y factorizando la informacin basada en estadsticas de los objetos del esquema (tablas o ndices) accedidos por la instruccin SQL, adems de las sugerencias de optimizacin colocadas como comentarios en la instruccin SQL, y el objetivo establecido en OPTIMIZER_MODE. Cuando en Oracle se disean nuevas prestaciones para la base de datos se utiliza exclusivamente la CBO como medio de optimizacin. En general consta de tres etapas : 1. Realizacin de planes potenciales de recuperacin de registros. 2. Estimacin del coste por plan teniendo en cuenta las estadsticas almacenadas en el diccionario de datos disponibles para cada objeto incluido en la query. El calculo de coste se basa en los recursos estimados para el ordenador incluyendo Entrada/Salida, CPU y memoria. 3. Seleccin del plan de menor coste.

Caractersticas disponibles con la Optimizacin Basada en Costes


Las siguientes caractersticas estn disponibles slo si se utiliza el Optimizador Basado en Costes (CBO) : Tablas e ndices particionados, y tablas organizadas por ndices ndices de clave inversa, e ndices basados en funciones Clusulas SAMPLE en sentencias SELECT Consultas paralelas y DML paralelo Transformaciones en estrella, y consultas en estrella Optimizador extensible Re-escritura de consultas con vistas materializadas Combinaciones hash ndices bitmap Index Skip Scans

Optimizacin basada en Reglas


Introduccin a la Optimizacin de Reglas El optimizador basado en reglas ha sido el principal mtodo de optimizacin de Oracle hasta que el optimizador basado en costes, introducido en la versin 7, ha ido ganando en prestaciones. Actualmente se desaconseja la utilizacin del optimizador basado en reglas, excepto para aplicaciones desarrolladas originalmente sobre Oracle 6 versiones anteriores, o explcitamente para este optimizador sobre versiones 7 y posteriores. El parmetro de INIT.ORA denominado OPTIMIZER_MODE determina la eleccin del optimizador. Si tiene el valor RULE, se utiliza siempre el optimizador basado en reglas. Si tiene el valor CHOOSE, se utiliza el optimizador basado en costes, a no ser que no haya estadsticas sobre las tablas, y no se haya indicado hints en las sentencias (entonces se utiliza el basado en reglas). El mtodo empleado por el optimizador basado en reglas es el siguiente : se analiza la sentencia SQL en cuestin, obtenindose varios planes de ejecucin posibles. Se clasifican estos planes en funcin del ranking de sus operaciones, y se elige el plan con menor ranking. El ranking de operaciones ha sido creado por Oracle, a partir de datos de tiempos medios de CPU, nmero de operaciones de Entrada/Salida, etc, de cada tipo de operacin.

Você também pode gostar