Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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.
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.
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
INIT.ORA
Valor=rule
Valor=choose