Está en la página 1de 49

Apunte de Procesamiento y Optimizacin de Consultas

Autores Diego Castro Sergio DArrigo Leticia Seijas Con la colaboracin de Cecilia Briozzo, Alejandro Eidelsztein y Cecilia Ruz

ndice
1 2 Introduccin. .............................................................................................................. Descripcin General del Procesamiento de Consultas ................................................................ 2.1 2.2 3 3.1 3.2 3.3 3.4 4 4.1 4.2 4.2.1 4.2.2 4.2.3 4.2.4 4.3 4.3.1 4.3.2 4.3.3 4.3.4 4.4 4.5 4.5.1 4.5.2 4.5.3 4.6 Procesamiento de Consultas .................................................................... 3 Componente Optimizador de Consultas ....................................................... 3 Relaciones ......................................................................................... 5 Memoria principal ................................................................................ 5 Costos .............................................................................................. 5 Aclaraciones generales ........................................................................... 5 Organizacin de archivos y registros ........................................................... 6 Heap files .......................................................................................... 6 Descripcin ................................................................................. 6 Costo de exploracin completa ........................................................... 6 Costo de bsqueda por igualdad (A = c) ................................................. 6 Costo de bsqueda por rango (c <= A <= d) ............................................. 7 Sorted File ......................................................................................... 7 Descripcin ................................................................................. 7 Costo de exploracin completa ........................................................... 7 Costo de bsqueda por igualdad (A = c) ................................................. 7 Costo de bsqueda por rango (c <= A <= d) ............................................. 8 ndices ............................................................................................. 8 Propiedades de los ndices ...................................................................... 8 ndices Clustered vs. unclustered ........................................................ 8 ndices Densos vs. No Densos ............................................................ 8 ndices Primarios vs. Secundarios ....................................................... 8 ndices rbol B+ clustered....................................................................... 9

Descripcin del modelo utilizado .......................................................................................

Organizacin de archivos e ndices .....................................................................................

Bases de Datos

Procesamiento y Optimizacin de Consultas

4.6.1 4.6.2 4.6.3 4.6.4 4.7 4.7.1 4.7.2 4.7.3 4.7.4 4.8 4.8.1 4.8.2 4.8.3 4.8.4 4.9 5 5.1 5.1.1 5.1.2 5.1.3 5.1.4 5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.3 5.3.1 5.3.2 5.3.3 5.3.4 6 7 Join (

Descripcin ................................................................................. 9 Costo de exploracin completa ........................................................... 9 Costo de bsqueda por igualdad (A = c) ................................................. 9 Costo de bsqueda por rango (c <= A <= d) ............................................. 9 ndices rbol B+ unclustered ................................................................. 10 Descripcin ............................................................................... 10 Costo de exploracin completa ......................................................... 10 Costo de bsqueda por igualdad (A = c) ............................................... 10 Costo de bsqueda por rango (c <= A <= d) ........................................... 10 ndices basados en hash esttico ............................................................. 11 Descripcin ............................................................................... 11 Costo de exploracin completa ......................................................... 11 Costo de bsqueda por igualdad (A = c) ............................................... 11 Costo de bsqueda por rango (c <= A <= d) ........................................... 11 Cuadro resumen de costos de acceso......................................................... 12 Proyeccin () .................................................................................. 13 Caractersticas del resultado ........................................................... 14 Algoritmo de Bsqueda Lineal en Archivo ............................................ 14 Algoritmo de Bsqueda Lineal en ndice B+ ........................................... 14 Algoritmo de Bsqueda Lineal en ndice hash ........................................ 15 Seleccin () .................................................................................... 15 Caractersticas del resultado ........................................................... 15 Algoritmo de Bsqueda Lineal en archivo ............................................ 17 Algoritmo de Bsqueda binaria en archivo ordenado............................... 17 Algoritmo de Bsqueda en ndice rbol B+ clustered ................................ 17 Algoritmo de Bsqueda en ndice rbol B+ unclustered ............................. 17 Algoritmo de Bsqueda en ndice hash ................................................ 18 Algoritmo de Interseccin de Rids basado en hash .................................. 18 Algoritmo de Unin de Rids basado en hash .......................................... 18 ) ....................................................................................... 19 Caractersticas del resultado ........................................................... 19 Algoritmo Block Nested Loops Join (BNLJ) ........................................... 20 Algoritmo Index Nested Loops Join (INLJ) ............................................ 21 Algoritmo Sort Merge Join (SMJ) ....................................................... 22

Evaluacin de operaciones relacionales...............................................................................

Planes de Ejecucin ................................................................................................ Optimizacin de Consultas.............................................................................................. 7.1 7.2 7.3 7.4 Optimizaciones Algebraicas ................................................................... 25 Algunas heursticas aplicables ................................................................ 26 Pasos para la optimizacin .................................................................... 27 Estrategia de Programacin Dinmica ....................................................... 27 Ejemplo 1 ........................................................................................ 28 Ejemplo 2 ........................................................................................ 36

Ejemplos .................................................................................................................. 8.1 8.2

Bibliografa ...............................................................................................................

Pgina 2

Bases de Datos

Procesamiento y Optimizacin de Consultas IMPORTANTE Este apunte es un complemento de la bibliografa que la materia utiliza como base para el tema. No contiene una visin exhaustiva ni completa de los contenidos, slo pretende ser un elemento ms de ayuda para la comprensin de los mismos.

Introduccin.

El presente apunte est orientado a dar una visin prctica del procesamiento de consultas sobre bases de datos relacionales. Adems de dar una idea bsica de las principales acciones que realiza un motor de base de datos relacionales para procesar una consulta, se brinda un panorama simplificado de las diferentes maneras de resolver las consultas, del clculo de sus costos y de la optimizacin de su ejecucin. Si bien cada motor de base de datos puede tener sus particularidades, entendemos que lo que aqu se plantea da una base razonable para permitir la comprensin de los mismos. El anlisis de costos de la ejecucin de determinadas sentencias SQL (sobre todo algunas que sean crticas o de uso muy frecuente) es importante en determinadas situaciones para completar el diseo fsico de una base de datos relacional. Si bien este anlisis puede abarcar todo tipo de sentencias DML, el enfoque de este apunte est orientado slo al procesamiento de las consultas SQL. 2 Descripcin General del Procesamiento de Consultas 2.1 Procesamiento de Consultas

Los lenguajes de consultas relacionales (como el SQL) nos dan una interfaz declarativa de alto nivel para acceder a los datos almacenados en una base de datos. El procesamiento de consultas se refiere al conjunto de actividades que realiza un motor de base de datos para la extraccin de datos de la base de datos a partir de una sentencia en un lenguaje de consulta. Los pasos bsicos son: 1.- Parsing y traduccin 2.- Optimizacin 3.- Generacin de cdigo 4.- Ejecucin de la consulta Estos pasos en general son realizados por diferentes componentes del motor. Los componentes clave son: el optimizador de consultas y el procesador de consultas. La idea general es que luego del parsing se construya una expresin algebraica equivalente (o podra ser ms de una), se analicen diferentes formas de resolver la consulta (estas formas se llaman planes de ejecucin) evaluando sus costos, y se seleccione la ms eficiente. Esto lo hace el componente generalmente llamado Optimizador de Consultas. Luego, esta consulta es pasada al otro componente generalmente llamado Procesador de Consultas, que es el que se encarga de ejecutar fsicamente la consulta de acuerdo al plan de ejecucin, produciendo y devolviendo el resultado. 2.2 Componente Optimizador de Consultas Mencionamos especialmente este componente ya que es el que ms nos interesa para el enfoque de la Prctica.

Pgina 3

Bases de Datos

Procesamiento y Optimizacin de Consultas

El optimizador de consultas es el responsable de generar el plan, que va a ser el input del motor de ejecucin. Debe ser un plan eficiente de ejecucin de una consulta SQL, perteneciente al espacio de los posibles planes de ejecucin de esa consulta. La cantidad de posibles planes de ejecucin para una consulta puede ser grande, ya sea porque algebraicamente se la puede escribir de diferentes maneras lgicamente equivalentes, o porque hay ms de un algoritmo disponible que implemente una expresin algebraica dada. Como el procesamiento de cada plan de ejecucin puede tener un rendimiento diferente, la tarea del optimizador es realmente importante a efectos de encontrar una buena solucin. Tpicamente, a partir de una consulta en lenguaje SQL, construye una expresin en lgebra relacional de la siguiente manera: 1. Realiza el producto cartesiano de las tablas del FROM de izquierda a derecha. 2. Realiza un select con las condiciones de la clusula WHERE. 3. Realiza una proyeccin con las columnas de la clusula SELECT. Una vez obtenida la expresin, pasa a armar un plan de ejecucin de la consulta construyendo un rbol, el cual consta de expresiones de lgebra relacional, donde las relaciones son las hojas y los nodos internos, las operaciones algebraicas. Es importante notar que una misma consulta puede tener varios planes de ejecucin (es decir, varios rboles pueden producir los mismos resultados). En general, el objetivo principal es minimizar la cantidad de accesos a disco. El optimizador construye diferentes planes basndose en: Los distintos algoritmos implementados en el procesador de consultas y disponibles al optimizador que implementan las operaciones de lgebra relacional (Proyeccin, Seleccin, Unin, Interseccin, Resta, Join) Informacin acerca de: o o o La estructura fsica de los datos (ordenamiento, clustering, hashing) La existencia de ndices e informacin sobre ellos (ej: nro. de niveles que posee). Estadsticas guardadas en el catlogo (esta informacin no est al da constantemente por razones de eficiencia, sino que se actualiza peridicamente): Tamao de archivos y factor de bloqueo Cantidad de tuplas de la relacin Cantidad de bloques que ocupa la relacin Cantidad de valores distintos de una columna (esto permite estimar la selectividad de una operacin)

Ciertas heursticas que le permiten encontrar planes de ejecucin sin necesidad de generar en forma completa el espacio de bsquedas (como podra ser tratar de armar planes que realicen cuanto antes las operaciones ms restrictivas y maximicen el uso de ndices y de las estructuras fsicas existentes)

Una vez construidos los diferentes planes alternativos, el optimizador selecciona el que sea ms eficiente, el cual es su output. 3 Descripcin del modelo utilizado A continuacin describimos el modelo que utilizaremos en la materia para trabajar sobre procesamiento y optimizacin de consultas. Como ya se dijo, ste es un modelo simplificado, en las bases de datos reales por lo general se encontrar mayor complejidad de casos que los que veremos aqu.

Pgina 4

Bases de Datos

Procesamiento y Optimizacin de Consultas

3.1

Relaciones

Las relaciones se dividen en bloques o pginas. La longitud de estos bloques se define a nivel general (se lo denota con LB), por lo que todas las relaciones poseen bloques del mismo tamao. Dada una relacin R, se conocen los siguientes datos: BR: Cantidad de bloques que ocupa R FBR: Cantidad de tuplas por bloque de R (factor de bloqueo) LR: Longitud de una tupla de R TR: Cantidad total de tuplas de R IR,A: Imagen del atributo A de R. Denota la cantidad de valores distintos de ese atributo en la relacin. XI: altura del rbol de bsqueda I FBI: Cantidad de entradas por bloque del ndice I (factor de bloqueo del ndice) BHI: Cantidad de bloques que ocupan los nodos hoja del ndice I (el ndice debe ser rbol B+). Si no se tiene el dato y se desea calcularlo, se utilizar el criterio de peor caso (cada nodo hoja estar completo en su mnimo, es decir, d/2, donde d es el orden del rbol). MBxBI: Cantidad mxima de bloques que ocupa un bucket del ndice I (el ndice debe ser basado en hashing) CBuI: cantidad de buckets del ndice I (el ndice debe ser basado en hashing)

Adems, asumiremos que: 3.2 en cada bloque de la relacin R solamente hay tuplas de R (y no de otras relaciones). La longitud de cada tupla es fija para cada tabla. La longitud de cada tupla es siempre bastante menor que la longitud de un bloque, en el sentido que un bloque puede contener ms de una tupla. Memoria principal

La memoria principal disponible para la base de datos tambin se divide en bloques. Llamaremos B a la cantidad de bloques disponibles.

3.3

Costos

Como unidad de medida se utilizarn los accesos a disco (tanto lecturas como escrituras). Vale la pena mencionar que motores de bases de datos reales pueden tener en cuenta otros factores que tambin influyen, como el tiempo insumido por cada acceso a disco, el tiempo insumido por cada acceso a memoria, el tiempo de procesamiento de determinadas operaciones (como ser la evaluacin de una funcin de hashing sobre una clave). En nuestro modelo simplificado estos factores no sern tenidos en cuenta.

3.4

Aclaraciones generales

En algunos casos podra suceder, por ejemplo, que se necesitara utilizar un bloque de una relacin y que ste ya se encontrara en memoria principal. Aprovechando esto, se podra evitar el acceso a disco (con el consiguiente ahorro de costos); sin embargo, es difcil predecir cmo la base de datos har uso de la memoria principal (puede depender de varios factores como la

Pgina 5

Bases de Datos

Procesamiento y Optimizacin de Consultas

poltica de reemplazos de bloques de memoria), por lo que se asumir que siempre se accede a disco. Los costos de las bsquedas sern expresados en peor caso. Dentro de un bloque slo se almacenarn tuplas enteras. Esto va a hacer que en algunos casos se desperdicie espacio dentro de algunos bloques. Todos los archivos o ndices estn organizados en bloques. Los tamaos de los bloques de disco y de memoria son iguales.

Organizacin de archivos e ndices

Recordaremos brevemente algunos conceptos sobre organizacin de archivos e ndices relacionados con el proceso de optimizacin de consultas, analizando los costos de acceso a los datos. Para el anlisis de costos de acceso slo consideraremos tres operaciones: a) la exploracin completa de las tuplas b) la bsqueda de tuplas a travs de una clave por igualdad (A=c) c) la bsqueda de tuplas a travs de una clave segn un rango de valores (c <= A<=d)

4.1

Organizacin de archivos y registros

Como ya se vio en la materia, desde un punto de vista lgico una base de datos relacional est compuesta por mltiples relaciones, que son tablas compuestas por tuplas. En un nivel fsico, esas tablas son archivos de registros, los que pueden estar agrupados en pginas o bloques. Los atributos de las relaciones aqu sern los campos de los registros. Todo registro de una tabla tiene un identificador nico llamado rid (record identifier). Este identificador es independiente del contenido del registro, y es utilizado directamente por el DBMS. En el alcance de la prctica de la materia, veremos dos tipos de archivos: Heap files y Sorted files.

4.2 4.2.1

Heap files Descripcin

Los archivos Heap son el tipo de archivo ms simple, que consiste de una coleccin desordenada de registros, agrupados en bloques. 4.2.2 Costo de exploracin completa

Hay que recorrer linealmente todas las tuplas del archivo (este proceso recibe el nombre de file scan). Para esto hay que leer todos los bloques de datos. El costo de acceso es: BR 4.2.3 Costo de bsqueda por igualdad (A = c)

En este caso no queda ms remedio que recorrer linealmente los bloques del archivo de datos.

Pgina 6

Bases de Datos

Procesamiento y Optimizacin de Consultas

Como en la materia siempre consideramos peor caso para las bsquedas, tendremos que recorrer siempre todos los bloques de datos del archivo, ya que puede haber ms de una tupla, o en caso de haber una sola encontrarse en ltimo lugar. El costo de acceso es: BR Si no considerramos peor caso, podramos pensar que cuando se trata de claves candidatas el costo se reduce a ( BR / 2 ), ya que podramos frenar la bsqueda al encontrarla, y en promedio esto nos dara ese resultado. 4.2.4 Costo de bsqueda por rango (c <= A <= d)

Aqu tambin la nica alternativa es recorrer linealmente el archivo de datos en forma completa. El costo de acceso es: BR

4.3 4.3.1

Sorted File Descripcin

Los archivos Sorted contienen los registros ordenados de acuerdo a los valores de determinados campos. En lo que sigue supondremos que el archivo est ordenado segn un atributo A. 4.3.2 Costo de exploracin completa

Hay que recorrer linealmente todas las tuplas del archivo (file scan). Para esto hay que leer todos los bloques de datos. Un valor agregado en este caso es que el resultado est ordenado segn A. El costo de acceso es: BR 4.3.3 Costo de bsqueda por igualdad (A = c)

En este caso se realiza una bsqueda binaria sobre los bloques del archivo para encontrar el que contenga la primer tupla que coincida con la clave. En caso de que A no sea clave candidata (i.e.,puede haber ms de una tupla con el valor buscado), habr que seguir recorriendo las tuplas siguientes hasta consumir todas las coincidentes con el valor buscado. En una primera aproximacin, diremos que el costo de acceso es: log2(BR) + B donde B es la cantidad de bloques adicionales que ocupan las tuplas que cumplen con el criterio de la bsqueda. Refinando la frmula anterior, si suponemos que T es la cantidad de tuplas que cumplen con el criterio de bsqueda, tendremos que el costo de acceso es: log2(BR) + T / FBR Notar que si A es clave candidata slo habr una tupla y no ser necesario ningn bloque adicional. En este caso el costo se simplifica a log2(BR)

Pgina 7

Bases de Datos

Procesamiento y Optimizacin de Consultas

4.3.4

Costo de bsqueda por rango (c <= A <= d)

Este caso es similar al de la bsqueda por igualdad con una clave no candidata, ya que habr que encontrar la primera tupla con valor c en el atributo A y luego recorrer secuencialmente. log2(BR) + T / FBR donde T es la cantidad de tuplas que cumplen con el criterio de bsqueda.

4.4

ndices

Para permitir accesos a la informacin de una forma no soportada (o no eficientemente soportada) por la organizacin bsica de un archivo, se suelen mantener estructuras adicionales llamadas ndices. Estas estructuras contienen informacin (entrada o index entry) que permite lograr el acceso deseado. Los ndices mejoran el acceso sobre un campo o conjunto de campos de las tuplas de una tabla. En general, las entradas de los ndices asociadas a una clave k (la llamaremos k*) pueden ser de la siguiente forma: a) k* = el valor clave k y el registro de datos asociado b) k* = el valor clave k y el rid del registro asociado (rid significa record id e identifica unvocamente a los registros de un archivo) c) k* = el valor clave k y una lista de los rid de los registros asociados. En la prctica de la materia vamos a trabajar con ndices de tipo rbol B+ (clustered y unclustered) e ndices basados en hash esttico.

4.5 4.5.1

Propiedades de los ndices ndices Clustered vs. unclustered

Si los datos del archivo estn ordenados fsicamente en el mismo orden que uno de sus ndices, decimos que ese ndice es clustered. Caso contrario es unclustered. Los archivos de datos a lo sumo pueden tener un ndice clustered, en tanto que la cantidad de ndices unclustered es ilimitada. Notar que si las entradas de un ndice rbol B+ son de la forma a) mencionada en el punto 4.4, ese ndice es naturalmente clustered. 4.5.2 ndices Densos vs. No Densos

Los ndices densos son los que tienen una entrada de ndice por cada valor de clave de bsqueda del archivo de datos. En cambio, si no todos los valores clave estn en el ndice, se llaman no densos. Por ejemplo, si tenemos un ndice clustered ciertas veces se optimiza el uso del espacio de ndices manteniendo en un ndice no denso slo el primer valor de clave de cada bloque del archivo de datos. En la prctica de la materia trabajaremos slo con ndices densos. 4.5.3 ndices Primarios vs. Secundarios

Se llaman ndices primarios (no confundir con claves primarias) a aquellos ndices que contienen todos los registros completos de los archivos. En caso de tener slo los rids se los llaman ndices secundarios. Notar que los ndices con entradas de la forma a) mencionada en el punto 4.4 corresponden a ndices primarios, en tanto que las b) y c) corresponden a ndices secundarios.

Pgina 8

Bases de Datos

Procesamiento y Optimizacin de Consultas

En la prctica de la materia trabajaremos slo con ndices secundarios.

4.6 4.6.1

ndices rbol B+ clustered Descripcin

Los ndices de tipo rbol B+ son rboles balanceados con una cantidad de claves por nodo interno dada por un orden d. Cada nodo interno tendr entre d/2 y d claves (con excepcin de la raz, cuyo mnimo de claves es 1). Los nodos hoja contienen la informacin k* de todos los registros del archivo. Adems, los nodos hoja se encuentran doblemente enlazados, pudiendo recorrerlos secuencialmente sin necesidad de volver a arrancar desde el nodo raz (algunas implementaciones tienen nodos simplemente enlazados pero en la materia asumiremos que tienen la doble asociacin). Estos ndices son los recomendados para acceder a rangos de claves. Adicionalmente, los ndices rbol B+ clustered son aquellos para los cuales el archivo de datos asociado est ordenado en el mismo orden que dicho ndice. En la materia trabajaremos con ndices clustered secundarios, es decir, con el archivo de datos separado del ndice, por lo que nuestros anlisis asumirn directamente esto. En lo que sigue supondremos que el ndice I est basado en el atributo A. 4.6.2 Costo de exploracin completa

En este caso el ndice no nos ayuda, con lo cual tendremos que usar otra forma de acceder al archivo (por ejemplo, file scan). 4.6.3 Costo de bsqueda por igualdad (A = c)

Se deben leer los bloques del rbol B+ comenzando desde la raz hasta el nodo hoja correspondiente (son XI bloques, uno por nivel del rbol). Se obtiene el rid del primer registro que cumple la igualdad y se lee el bloque correspondiente del archivo de datos. En caso de que haya ms de un registro coincidente con la seleccin, se siguen recorriendo secuencialmente los bloques de datos directamente desde el archivo. En una primera aproximacin, diremos que el costo de acceso es: XI + B donde B es la cantidad de bloques que ocupan las tuplas que cumplen con el criterio de la bsqueda. Refinando la frmula anterior, si suponemos que T es la cantidad de tuplas que cumplen con el criterio de bsqueda, tendremos que el costo de acceso es: XI + T / FBR Notar que si A es clave candidata slo habr una tupla y no ser necesario ningn bloque adicional. En este caso el costo se simplifica a XI + 1 4.6.4 Costo de bsqueda por rango (c <= A <= d)

Similar al anterior, pero la primer bsqueda se hace por el valor c, accediendo inicialmente al archivo de datos por el registro con menor clave que sea >= c, es decir, el primer registro que cumpla la condicin. XI + T / FBR donde T es la cantidad de tuplas que cumplen con el criterio de bsqueda. Las tuplas resultantes quedan ordenadas segn el atributo A.

Pgina 9

Bases de Datos

Procesamiento y Optimizacin de Consultas

4.7 4.7.1

ndices rbol B+ unclustered Descripcin

Los ndices de tipo rbol B+ unclustered son ndices rbol B+ para los cuales el archivo de datos asociado no est ordenado segn el orden de dicho ndice. En lo que sigue supondremos que el ndice I est basado en el atributo A. 4.7.2 Costo de exploracin completa

Al igual que en el ndice clustered, el ndice no nos ayuda para este caso. 4.7.3 Costo de bsqueda por igualdad (A = c)

Se deben leer los bloques del rbol B+ comenzando desde la raz hasta el nodo hoja correspondiente (son X bloques, uno por nivel del rbol). Se obtiene el rid del primer registro que cumple la igualdad y se lee el bloque correspondiente del archivo de datos. En caso de que haya ms de un registro coincidente con la seleccin, se seguirn leyendo los rids del nodo hoja y, eventualmente si se consumen todos los rids de ese nodo, se pasar a leer los del prximo nodo hoja (aprovechando que estn doblemente enlazados). Para cada uno de los punteros, se debe acceder al bloque de datos que contiene la tupla apuntada (o sea, tenemos que levantar un bloque de datos por cada entrada del ndice coincidente). Si bien puede suceder que 2 tuplas a recuperar se encuentren en el mismo bloque, los clculos se hacen con la peor situacin posible (o sea que cada tupla est en un bloque distinto). En una primera aproximacin, diremos que el costo de acceso es: XI - 1 + BHI + T donde BHI es la cantidad de bloques de nodos hoja del ndice a recorrer y T es la cantidad de tuplas coincidentes con el criterio de bsqueda. Notar que el -1 de la frmula anterior se debe a que dentro de los bloques de nodos hoja est incluido el ltimo nivel del rbol Refinando la frmula, tendremos que el costo de acceso es: XI - 1 + T / FBI + T donde FBI el factor de bloqueo del ndice I Notar que si A es clave candidata slo habr una tupla y no ser necesario ningn bloque adicional. En este caso el costo se simplifica a XI + 1 Adems, notar que si todos los punteros a tuplas que coinciden con la bsqueda entran en una sola hoja, el costo queda XI + T 4.7.4 Costo de bsqueda por rango (c <= A <= d)

Similar al anterior, pero la primer bsqueda se hace por el valor c, accediendo inicialmente al archivo de datos por el registro con menor clave que sea >= c. XI - 1 + T / FBI + T donde T es la cantidad de tuplas que cumplen con el criterio de bsqueda y FBI el factor de bloqueo del ndice I. Las tuplas resultantes quedan ordenadas segn el atributo A.

Pgina 10

Bases de Datos

Procesamiento y Optimizacin de Consultas

4.8 4.8.1

ndices basados en hash esttico Descripcin

Los ndices basados en hash esttico estn compuestos por una cantidad determinada (fija) de buckets, donde la informacin k* es ubicada a travs de la utilizacin de una funcin de hash. Cada bucket es una lista encadenada de bloques, los que se irn agregando bajo demanda en la medida en que se vayan completando los bloques previos de ese bucket. Estos ndices son los ideales para bsquedas por igualdad. En la materia trabajaremos con ndices basados en hash secundarios, es decir, con el archivo de datos separado del ndice, por lo que nuestros anlisis asumirn directamente esto. En lo que sigue supondremos que el ndice I est hasheado por el atributo A. 4.8.2 Costo de exploracin completa

En este caso el ndice no nos ayuda. 4.8.3 Costo de bsqueda por igualdad (A = c)

Se evala la funcin de hashing sobre la clave (asumimos costo cero para esta operacin), luego accedemos al bucket correspondiente. A partir de ah recorremos los bloques del bucket buscando los rids de las tuplas. En este ltimo caso, por cada entrada del ndice que cumpla la condicin se necesitar acceder al bloque correspondiente del archivo de datos. Notar que en general la cantidad de registros a buscar ser un nmero relativamente pequeo. El costo de acceso es: MBxBI + T donde MBxBI es la cantidad mxima de bloques de un bucket del ndice I, y T es la cantidad de tuplas coincidentes con la bsqueda. 4.8.4 Costo de bsqueda por rango (c <= A <= d)

Nuevamente, en este caso el ndice no nos ayuda. Notar que para poder utilizar un ndice hash es necesario proveer los valores de bsqueda, con lo cual no ser posible efectuar bsquedas por rango, dado que sera necesario conocer todos los valores posibles comprendidos en el rango y en algunos casos puede haber un nmero infinito de valores en un rango.

Pgina 11

Bases de Datos

Procesamiento y Optimizacin de Consultas

4.9

Cuadro resumen de costos de acceso

El siguiente cuadro resume los costos de acceso de las operaciones de consulta bsicas segn los diferentes tipos de archivo e ndices que utilizaremos en la prctica de la materia, siempre teniendo en cuenta nuestro modelo simplificado.

Tipo de archivo / ndice

Costo de exploracin completa BR

Costo de bsqueda por igualdad (A = k) BR log2(BR) + T / FBR XI + T / FBR X - 1 + T / FBI + T

Costo de bsqueda por rango (k1 <= A <= k2) BR log2(BR) + T / FBR XI + T / FBR X - 1 + T / FBI + T

Heap file

Sorted file

BR

ndice B+ clustered sobre A ndice B+ unclustered sobre A ndice hash esttico sobre A Donde:

MBxBI + T

T es la cantidad de tuplas que cumplen con el criterio de la bsqueda FBR es el factor de bloqueo del archivo FBI es el factor de bloqueo del ndice I MBxBI es la cantidad mxima de bloques de un bucket

Evaluacin de operaciones relacionales

Como ya hemos mencionado, para procesar consultas se construyen planes de ejecucin, que son rboles donde inicialmente los nodos son operadores algebraicos. Cada operacin algebraica tiene una o ms implementaciones fsicas. Llamaremos operador fsico a cada implementacin. Las diferentes implementaciones aprovechan o explotan algunas propiedades de las tablas a efectos de lograr una mejor performance, por ejemplo: Existencia de ndices relevantes en los archivos input Ordenamiento interesante de los archivos de input Tamao de los archivos de input Tamao del buffer Iteracin: se examinan todas las tuplas de la relacin, aunque a veces se examina el ndice. Indexacin: si hay una condicin de seleccin y/o join y a su vez existe un ndice sobre los campos involucrados, se utilizar el ndice.

Los diversos algoritmos se basan en algunos de los siguientes principios:

Pgina 12

Bases de Datos

Procesamiento y Optimizacin de Consultas

Particionamiento: particionando la relacin segn una clave de bsqueda podremos descomponer la operacin en operaciones menos costosas. Los diferentes mtodos para recuperar tuplas se llaman caminos de acceso: nosotros veremos el file scan (recorrido sobre el archivo de datos) y el index scan (recorrido sobre las entradas de un ndice). Coincidencia con un ndice (index matching): un predicado p coincide con la clave de un ndice rbol B+ si el predicado es una conjuncin de trminos de la forma (A op c) involucrando a todos los atributos de un prefijo de la clave del ndice (o a la clave completa) un predicado p coincide con la clave de un ndice basado en hash si el predicado es una conjuncin de trminos de la forma (atributo = valor) para todos los atributos del ndice Llamaremos selectividad de un predicado p (y lo denotamos sel(p) ) a la proporcin de tuplas de una relacin que satisfacen ese predicado, es decir, la divisin entre la cantidad de tuplas que satisfacen el predicado sobre la cantidad total de tuplas de las relacin. Tendremos que 0 <= sel(p) <= 1 Notar que la selectividad del predicado (A = c) para una relacin R, con A clave candidata de R, es 1/TR (y es la mejor selectividad que se puede obtener para una relacin). A continuacin veremos diversas implementaciones para las operaciones de SELECCIN, PROYECCIN y JOIN en forma individual, y ms adelante analizaremos algunas cuestiones de su composicin en planes de ejecucin. En el alcance de la materia no consideraremos clusulas del estilo ORDER BY , GROUP BY ni funciones de agregacin ni sentencias SQL anidadas. La idea general es dar una breve explicacin de los algoritmos, analizando sus costos de procesamiento (considerando Costo de Input y Costo de Output), la cantidad de tuplas en el resultado, y eventualmente alguna caracterstica del mismo. IMPORTANTE: En el marco del proceso de optimizacin, no calcularemos el costo del output del resultado final (o sea, cuando se trate de operaciones que estn en la raz del rbol del plan de ejecucin). Esto es porque el resultado que producen todos los planes es el mismo, por lo que el costo de ese output ser igual en todos los casos. De todos modos, en los puntos que siguen hablaremos del costo del output para indicar cmo calcularlo en los casos que se necesite (ver seccin 6. Planes de Ejecucin).

5.1

Proyeccin ()

La operacin de proyeccin (l, R, Q) procesa las tuplas de una relacin de entrada R y produce un resultado Q con todas las tuplas pero slo conteniendo los atributos indicados en la lista l.

Pgina 13

Bases de Datos

Procesamiento y Optimizacin de Consultas

5.1.1

Caractersticas del resultado

5.1.1.1 Cantidad de tuplas En la materia no consideraremos el caso de eliminacin de duplicados, por lo que la cantidad de tuplas del resultado siempre ser igual a la cantidad de tuplas de la relacin original. Por lo tanto la cantidad de tuplas del resultado ser TQ = TR 5.1.1.2 Longitud de tuplas La longitud de las tuplas del resultado ser la suma de las longitudes de los atributos incluidos en la proyeccin. En caso de que no se sepa las longitudes de los campos, se asumir que todos los campos tienen la misma longitud y por lo tanto ser proporcional a la cantidad de atributos incluidos. LQ = Ai in l (LAi)

5.1.1.3

Cantidad de bloques

La cantidad de bloques del resultado se calcula en funcin de la longitud de los bloques, la cantidad de tuplas y la longitud de cada tupla. Calculemos primero el factor de bloqueo del resultado, es decir, cuntas tuplas del resultado entran por bloque: FBQ = [ LB / LQ ] (se considera parte entera porque slo se guardan tuplas enteras en los bloques) La cantidad de bloques ocupados ser BQ = TQ / FBQ (se considera parte entera por exceso ya que por ms que no se llene un bloque, el resto se desperdiciar) 5.1.1.4 Costo del Output Para el enfoque de la materia, el costo del output (CO) de una operacin, en caso de tener que computarse, siempre es la cantidad de bloques necesarios para escribir el resultado en disco. Por lo tanto, el costo del output ser: CO = BQ 5.1.2 Algoritmo de Bsqueda Lineal en Archivo

Precondicin: ninguna Descripcin: se recorren todos los bloques de la relacin input (file scan) y se seleccionan los atributos de cada tupla. Costo de input (CI): El costo del input es CI = BR 5.1.3 Algoritmo de Bsqueda Lineal en ndice B+

Precondicin: todos los atributos a proyectar forman parte de la clave del ndice Descripcin: se accede al primer nodo hoja (el de menor clave), se recorren todos los bloques de nodos hoja del ndice y se seleccionan los atributos de cada entrada del ndice.

Pgina 14

Bases de Datos

Procesamiento y Optimizacin de Consultas

Costo de input (CI): Se suma el costo de acceder a los nodos no hoja necesarios, ms todos los bloques hoja del ndice El costo del input es CI = X 1 + BHI Notar que consideramos X 1 porque es lo que cuesta encontrar el puntero al primer nodo hoja (hay que bajar en el rbol hasta las hojas) 5.1.4 Algoritmo de Bsqueda Lineal en ndice hash

Precondicin: todos los atributos a seleccionar forman parte de la clave del ndice Descripcin: Se recorren todos los bloques de todos los buckets del ndice y se seleccionan los atributos de cada entrada del ndice. Costo de input (CI): Se calculan en funcin de la cantidad mxima de bloques de ndice por bucket. El costo del input es CI = CBUI * MBxBI

5.2

Seleccin ()

La operacin de seleccin (p, R, Q) procesa las tuplas de una relacin de entrada R y genera un resultado Q con todas las tuplas que cumplen la condicin p.

5.2.1

Caractersticas del resultado

5.2.1.1 Cantidad de tuplas del resultado Para estimar la cantidad de tuplas que satisfacen una condicin asumiremos (salvo indicacin en contrario) que la distribucin de valores es uniforme y que los valores de los atributos son probabilsticamente independientes. 5.2.1.1.1 Caso condicin del tipo A = a Si A no es clave candidata, se estimar como TQ = TR / IR.A Notar que si A es clave candidata, IR.A = TR, por lo que la cantidad de tuplas resultante es 1 5.2.1.1.2 Caso condicin del tipo A = a and B = b Se estimar como TQ =TR / [ IR,A * IR,B ] En caso de haber ms trminos de igualdad para otros campos en la conjuncin, se seguir multiplicando el denominador por la imagen de cada campo.

Pgina 15

Bases de Datos

Procesamiento y Optimizacin de Consultas

Notar que la cantidad de tuplas del resultado es independiente del algoritmo de implementacin. 5.2.1.1.3 Caso condicin del tipo A > a Si hay nocin de distancia sobre el atributo A, se estimar como: TQ = TR * dist(a, Amax) / dist(Amin, Amax) donde Amin y Amax son los valores mnimo y mximo de la Imagen de A. Si la nocin de distancia no es aplicable sobre el atributo A, se estimar como: TQ = TR / 2 5.2.1.1.4 Caso condicin del tipo a1 < A < a2 Si hay nocin de distancia sobre el atributo A, se estimar como: TQ = TR * dist(a1, a2) / dist(Amin, Amax) donde Amin y Amax son los valores mnimo y mximo de la Imagen de A. Si la nocin de distancia no es aplicable sobre el atributo A, se estimar como: TQ = TR / 2 5.2.1.1.5 Caso condicin del tipo A IN {a1, , ai, , an} Se estimar como TQ = TR * n / IR,A 5.2.1.1.6 5.2.1.1.7 Caso condicin del tipo A = a or B = b Se estimar como TQ = (TR / IR,A ) + (TR / IR,B ) - (TR / ( IR,A * IR,B )) Recordar que estamos asumiendo probabilidades independientes y distribucin uniforme de los valores de los diferentes atributos. Se deja como ejercicio calcular la cantidad de tuplas de un predicado disyuntivo que tenga ms de dos trminos 5.2.1.1.8 Caso general En el caso general, estimaremos la cantidad de tuplas a partir de la selectividad, con la siguiente frmula: TQ = sel(p) * TR 5.2.1.2 Longitud de tuplas La longitud de las tuplas del resultado ser la misma que las de la relacin input, por lo que queda LQ = LR 5.2.1.3 Cantidad de bloques La cantidad de bloques del resultado se calcula en funcin de la longitud de los bloques, la cantidad de tuplas y la longitud de cada tupla. El factor de bloqueo del resultado es el mismo que el de la relacin input, ya que las tuplas son iguales: FBQ = FBR La cantidad de bloques ocupados ser BQ = TQ / FBQ

Pgina 16

Bases de Datos

Procesamiento y Optimizacin de Consultas

5.2.1.4 Costo del Output Para el enfoque de la materia, el costo del output (CO) de una operacin, en caso de tener que computarse, siempre es la cantidad de bloques necesarios para escribir el resultado en disco. Por lo tanto, el costo del output ser: CO = BQ 5.2.2 Algoritmo de Bsqueda Lineal en archivo

Precondicin: ninguna Descripcin: se recorren todos los bloques del archivo (file scan) y se comprueba la condicin en cada tupla Costo de input (CI): El costo del input es CI = BR Notar que este algoritmo , si bien es ineficiente, tiene la ventaja de que es aplicable a cualquier tipo de archivo, no tiene precondiciones 5.2.3 Algoritmo de Bsqueda binaria en archivo ordenado el archivo est ordenado segn un atributo k y el predicado p involucra a k.

Precondicin: se deben dar las siguientes condiciones simultneamente: Descripcin: se realiza bsqueda binaria hasta encontrar la primer tupla coincidente, y luego se recorre secuencialmente el archivo mientras las tuplas cumplan la condicin. Costo de input (CI): log2(BR) + sel(p) * TR/ FBR Notar que en caso de tratarse de una bsqueda por igualdad de una clave candidata, se simplifica la frmula anterior, quedando CI = log2(BR) Caracterstica del resultado: la relacin del output est ordenada de acuerdo a la misma clave que la relacin R del input 5.2.4 Algoritmo de Bsqueda en ndice rbol B+ clustered el archivo tiene un ndice I rbol B+ clustered segn una clave k y el predicado p coincide con k.

Precondicin: se deben dar las siguientes condiciones simultneamente: -

Descripcin: Esto se resuelve accediendo segn el ndice, como se vio para bsquedas por igualdad o rango de ndices rbol B+ clustered. Costo de input (CI): XI + sel(p) * TR / FBR Caracterstica del resultado: la relacin del output est ordenada de acuerdo a la misma clave que el ndice utilizado 5.2.5 Algoritmo de Bsqueda en ndice rbol B+ unclustered el archivo tiene un ndice I de tipo rbol B+ unclustered segn una clave k y el predicado p coincide con k.

Precondicin: se deben dar las siguientes condiciones simultneamente: -

Pgina 17

Bases de Datos

Procesamiento y Optimizacin de Consultas

Descripcin: Esto se resuelve accediendo segn el ndice, como se vio para bsquedas por igualdad o rango de ndices rbol B+ unclustered. Costo de input (CI): XI - 1 + sel(p) * TR / FBI + sel(p) * TR Caracterstica del resultado: la relacin del output est ordenada de acuerdo a la misma clave que el ndice utilizado 5.2.6 Algoritmo de Bsqueda en ndice hash el archivo tiene un ndice I basado en hashing segn una clave k y el predicado p coincide con k.

Precondicin: se deben dar las siguientes condiciones simultneamente: -

Descripcin: Esto se resuelve accediendo segn el ndice, como se vio para bsquedas por igualdad en ndices basados en hash. Costo de input (CI): CI = MBxBI + sel(p) * TR 5.2.7 Algoritmo de Interseccin de Rids basado en hash

Precondicin: Se tiene un predicado conjuntivo p = p1 ^ p2, tal que p no coincide con ningn ndice, pero p1 coincide con un ndice I1 y p2 coincide con un ndice I2 Descripcin: Se realiza sobre I1 la bsqueda de las tuplas que cumplen p1. Los rids de las tuplas encontradas se escriben en un archivo hash intermedio. Algo anlogo se hace sobre I2 para las tuplas que cumplen p2, utilizando el mismo archivo hash. Luego se recorre el hash y para cada rid encontrado que aparezca dos veces se accede al archivo de datos para obtener las tuplas Este algoritmo puede extrapolarse a un predicado conjuntivo de la forma p1 ^ ^pi ^ ^ pn Costo de input (CI): Se deja como ejercicio, suponiendo que el hash intermedio entra completo en memoria. Notar que si el archivo hash entra en memoria, la operacin sobre el hash tiene costo 0. En la materia slo trabajaremos con expresiones en Forma Normal Conjuntiva 5.2.8 Algoritmo de Unin de Rids basado en hash

Precondicin: Se tiene un predicado disyuntivo p = p1 v p2, tal que p no coincide con ningn ndice, pero p1 coincide con un ndice I1 y p2 coincide con un ndice I2 Descripcin: Se realiza sobre I1 la bsqueda de las tuplas que cumplen p1. Los rids de las tuplas encontradas se escriben en un archivo hash intermedio. Algo anlogo se hace sobre I2 para las tuplas que cumplen p2, utilizando el mismo archivo hash. Slo se agregan las tuplas que no estn repetidas.

Pgina 18

Bases de Datos

Procesamiento y Optimizacin de Consultas

Luego se recorre el hash y para cada rid encontrado se accede al archivo de datos para obtener las tuplas Este algoritmo puede extrapolarse a un predicado disyuntivo de la forma p1 v v pi v v pn Costo de input (CI): Se deja como ejercicio, suponiendo que el hash intermedio entra completo en memoria. Notar que si el archivo hash entra en memoria, la operacin sobre el hash tiene costo 0. En la materia slo trabajaremos con expresiones en Forma Normal Disyuntiva

5.3

Join (

La operacin de Join (p, R, S, Q) procesa las tuplas de dos relaciones de entrada R y S, y produce un resultado Q con todas las tuplas del producto cartesiano R X S que cumplen con la condicin p.

En todo lo que sigue asumiremos que se trata siempre de equijoins, y la condicin de junta est dada por R.ri = S.sj. 5.3.1 Caractersticas del resultado

5.3.1.1 Cantidad de tuplas Dada una condicin de junta del estilo R.ri = S.sj, la cantidad de tuplas del resultado estar determinada por el atributo de la junta que tenga mayor imagen en la relacin a la que pertenece. Por lo tanto la cantidad de tuplas del resultado ser TQ = ( TR * TS ) / max(IR,ri, IS,sj) Notar que cuando ri es clave fornea de sj (i.e. sj es clave primaria de S), tendremos que IR,ri <= IS,sj = TS. Por lo tanto, en este caso TQ = TR; dicho con un ejemplo ms intuitivo, cuando tenemos una relacin muchos a uno, la cantidad de tuplas resultante de una junta natural es la cantidad de tuplas de la relacin del lado muchos 5.3.1.2 Longitud de tuplas La longitud de las tuplas del resultado ser la suma de las longitudes de las tuplas de las relaciones de input. Queda as: LQ = LR + LS Tener en cuenta que para los natural joins, la longitud de las tuplas es LR + LS L, donde L es la longitud de los campos comunes entre R y S (ya que los mismos no se repiten en el resultado).

Pgina 19

Bases de Datos

Procesamiento y Optimizacin de Consultas

5.3.1.3

Cantidad de bloques

La cantidad de bloques del resultado se calcula en funcin de la longitud de los bloques, la cantidad de tuplas y la longitud de cada tupla. Calculemos primero el factor de bloqueo del resultado, es decir, cuantas tuplas del resultado entran por bloque: FBQ = [ LB / LQ ] La cantidad de bloques ocupados ser BQ = TQ / FBQ 5.3.1.4 Costo del Output Para el enfoque de la materia, el costo del output (CO) de una operacin, en caso de tener que computarse, siempre es la cantidad de bloques necesarios para escribir el resultado en disco. Por lo tanto, el costo del output ser: CO = BQ

5.3.2

Algoritmo Block Nested Loops Join (BNLJ)

Precondicin: se tienen B bloques de memoria disponibles para la operacin (B-2 bloques se utilizan para el almacenamiento de la relacin R, 1 bloque se utiliza para ir leyendo los bloques de S, y el bloque restante se destina para la salida de la operacin, en memoria). Descripcin: Para cada segmento de B-2 bloques de R Para cada bloque de S Para toda tupla r del segmento de R y tupla s del bloque de S Si ri == sj Agregar <r,s> al resultado Fin si Fin para Fin para Fin para

Costo de input (CI) BR + BS * BR/(B-2) Explicacin: Coloco en memoria B-2 bloques de BR y recorro BS entero. Esto lo hago [BR/(B-2)] veces. A su vez, estoy recorriendo todo R una sola vez, entonces debo sumar BR.

Pgina 20

Bases de Datos

Procesamiento y Optimizacin de Consultas

5.3.3

Algoritmo Index Nested Loops Join (INLJ) el archivo tiene un ndice I segn una clave k. el predicado p del join coincide con el ndice I.

Precondicin: Descripcin Para cada tupla r de R Para cada tupla s de S | ri = sj (obtenida segn el ndice de S) Agregar <r,s> al resultado Fin para Fin para Costos de input (CI) BR + TR *(buscar para la tupla tR index entry/ies en ndice de S + buscar valor/es apuntados por index entry/ies) Explicacin: Por cada bloque de R y por cada tupla dentro de ese bloque busco los index entries correspondientes en el ndice de S y busco los valores apuntados. El costo depende casi ntegramente del tipo de ndice. Debemos tener en cuenta si el ndice es clustered o unclustered, ya que en el primer caso accedemos a bloques con tuplas que cumplen la condicin de junta, mientras que en el segundo caso tendremos un acceso por cada tupla que cumpla la condicin.

Pgina 21

Bases de Datos

Procesamiento y Optimizacin de Consultas

5.3.4

Algoritmo Sort Merge Join (SMJ)

Precondicin: ninguna Descripcin Obs: Llamamos particin al conjunto de tuplas que poseen el mismo valor de cierto atributo

Si R no est ordenada en el atributo i ordenar R Si S no est ordenada en el atributo j ordenar S r = primera tupla de R //itera sobre R s = primera tupla de S //itera sobre S Mientras r null y s null //cuando se llega al final de un archivo se obtiene null Si ri < sj r = siguiente tupla en R Si ri == sj //Se encontr la particin en S para ri... Mientras ri == sj //Se procesa particin actual de R //Marca el inicio de la particin en S para ri //Se procesa particin actual de S inicio_part_s = s Mientras sj == ri //No hay particin en S para ri

Agregar <r,s> al resultado s = siguiente tupla en S Fin mientras s = inicio_part_s r = siguiente tupla en R Fin mientras Si ri > sj s = siguiente tupla en S Fin mientras Costo de input (CI) El costo de input para SMJ involucra el costo de ordenar cada una de las relaciones participantes por el atributo de junta (podra darse el caso que alguna de las relaciones ya estuviera ordenada). A esto debemos adicionarle el costo del merge, proceso en el cual se buscan en ambas relaciones ordenadas las tuplas que cumplen la condicin de junta (es decir, las tuplas que pertenecen a la misma particin), luego de lo cual se realiza la junta de estas tuplas. El costo de merge es BR + BS, dado que se recorre una //s no apuntaba al inicio de la particin en S de ri entonces sigo buscando

Pgina 22

Bases de Datos

Procesamiento y Optimizacin de Consultas

vez cada relacin (consideramos que las particiones de S se recorren una sola vez para los casos en que el valor de Ri no se repite en R). El costo de ordenar una relacin (en este caso R) es: (logB-1BR/B+1)*2BR

logB-1BR/B+1 representa la cantidad de pasadas y esta cantidad se multiplica por 2BR porque en
cada pasada leo y vuelvo a escribir cada bloque de R.

Planes de Ejecucin

Hasta ahora vimos cmo evaluar el procesamiento de operaciones algebraicas individualmente, estimando sus costos de input y de output. Como ya se dijo, en el marco del procesamiento y optimizacin de consultas primero se construyen representaciones algebraicas de las consultas a procesar. Estas representaciones tienen la forma de rbol de operaciones algebraicas. Por ejemplo, la consulta SELECT m.nomMateria, d.nomDepto FROM MATERIA m, DEPARTAMENTO d WHERE m.cod_depto=d.cod_depto Podra representarse por el siguiente rbol (no es la nica representacin posible):

Las hojas del rbol representan las relaciones origen de la consulta, en este caso MATERIA y DEPARTAMENTO Cada nodo no hoja representa las diferentes operaciones algebraicas que se van a realizar para arribar al resultado final, en este caso |X| y . Los arcos de un nodo hacia sus sucesores representan las relaciones de input de esa operacin, en este caso |X| tiene dos inputs, MATERIA y DEPARTAMENTO, en tanto que tiene un input, MATERIA |X| DEPARTAMENTO. Los arcos de un nodo hacia sus antecesores representan la relacin output de esa operacin, en este caso, |X| tiene un output que es MATERIA |X| DEPARTAMENTO. El arco saliente del nodo raz representa el resultado final. En este caso, el arco saliente de representa la relacin resultante de realizar (nomMateria, nomDepto) (MATERIA |X| DEPARTAMENTO)

Pgina 23

Bases de Datos

Procesamiento y Optimizacin de Consultas

Cada operacin algebraica tiene uno o ms algoritmos u operadores fsicos que la resuelven. Asimismo, cada tabla tiene uno o ms mtodos de acceso disponibles. Para cada nodo del rbol debemos indicar una de esas formas fsicas concretas de resolverlo. En nuestro ejemplo, suponiendo que tenemos disponible un ndice rbol B+ unclustered sobre DEPARTAMENTO.cod_depto, un posible plan de ejecucin sera el siguiente:

Para obtener los costos totales de ejecucin de un plan, tenemos que sumar todos los costos de input y output de los diferentes nodos del mismo (con excepcin, como ya se dijo, del output del nodo raz, ya que es siempre el mismo para cualquier plan). Para realizar el anlisis de costos de un plan es importante tener en cuenta qu es lo que pasa con los resultados intermedios entre los nodos de cada rbol. Una posibilidad es materializar estos resultados, escribindolos a disco; en este caso tendremos que computar el costo de output de la operacin previa y el costo de input de la siguiente operacin. Otra posibilidad es intentar realizar la siguiente operacin en forma pipelinizada, realizando ambas operaciones y recin luego escribiendo a disco; la primer operacin le va pasando las tuplas resultados a la segunda a medida que las calcula, y la segunda las procesa directamente, sin necesidad de darles persistencia temporaria; en este caso, no tendremos que computar costo de output de la primer operacin ni de input de la segunda, ya que no se realizan accesos a disco. Un ejemplo donde esta mejora se puede ver en forma clara es en una seleccin seguida de una proyeccin. Tiene sentido que a medida que se seleccionan las tuplas de una de las relaciones, se vayan proyectando algunos atributos sin necesidad de escribir a disco el resultado intermedio. En nuestro ejemplo anterior podramos optar por pipelinizar el input de la raz. Quedara as:

Pgina 24

Bases de Datos

Procesamiento y Optimizacin de Consultas

La posibilidad de utilizar o no pipeline en la composicin de operaciones la da el procesador de consultas (al igual que para cualquier operacin fsica). Para poder realizar pipeline en una composicin necesitamos que el procesador tenga implementada una operacin fsica pipelinizada para dicha composicin. En el proceso de optimizacin siempre debemos analizar los distintos algoritmos que tenemos disponibles en cada operacin. Es importante notar en este punto que los ndices slo estn disponibles cuando se trata de la relacin original. Es decir, una vez que realizamos una operacin sobre una relacin, el ndice no est disponible sobre la relacin resultado, ya que sta queda en memoria o grabada en disco en un nuevo archivo temporario que no tiene ndices. Otra cosa a tener en cuenta es lo que se llama rdenes interesantes. Un resultado intermedio est en un orden interesante si est ordenado de forma tal que: Alguna clusula ORDER BY de un nivel superior del rbol coincide con ese orden Alguna clusula GROUP BY de un nivel superior del rbol coincide con ese orden Alguna clusula DISTINCT de un nivel superior est aplicada a atributos que coinciden con ese orden Algn join de un nivel superior puede hacer uso de ese orden para disminuir sus costos Recordar que en la prctica de la materia no trabajaremos con ORDER BY, ni con GROUP BY ni con DISTINCT En muchos casos, dentro de un plan global, puede ser ms conveniente mantener un algoritmo que deje el resultado en un orden interesante (ya que ser aprovechado por una operacin posterior), an cuando el costo local de esa operacin no sea el mejor.

Optimizacin de Consultas 7.1 Optimizaciones Algebraicas

Las optimizaciones de este tipo son aquellas que buscan mejorar la performance de la consulta independientemente de la organizacin fsica. Involucran propiedades algebraicas que permiten construir una consulta equivalente a la original. Algunas propiedades Cascada de C1 and C2 .....and Cn (R) C1 (C2 (....Cn (R)...)) Conmutatividad de C1 (C2 (R)) C2 (C1 (R))

Pgina 25

Bases de Datos

Procesamiento y Optimizacin de Consultas

Cascada de list1 (list2 (R)) list1 list2 (R) Conmutatividad de con respecto a A1, A2, .....An (C (R)) C (A1, A2,.....,An (R)) Si C referencia solamente a atributos dentro de A1...An Conmutatividad del Producto Cartesiano (o Junta) RxSSxR Conmutatividad del con respecto al Producto Cartesiano (o Junta) C (R x S) (Cr(R)) x (Cs(S)) donde C = Cr U Cs Conmutatividad de la con respecto al Producto Cartesiano (o Junta) L (R x S) (L1(R)) x (L2(S)) donde L = L1 U L2 Conmutatividad de operaciones de conjuntos ( e ) RS SR Si = { e } Asociatividad del Producto Cartesiano, Junta, e ( R S) T R ( S T ) Si = {x, |X|, e } 7.2 Algunas heursticas aplicables

Los optimizadores de consultas utilizan las reglas de equivalencia del lgebra relacional para mejorar, en la medida de lo posible, el rendimiento esperado de una consulta dada. A continuacin enumeramos algunas heursticas aplicables: a) Considerar slo rboles sesgados a izquierda Al analizar los posibles rboles candidatos, reducir el espacio de bsqueda considerando slo rboles sesgados a izquierda, es decir, rboles donde los sucesores derechos de cualquier nodo sean hojas. b) Descomponer las selecciones conjuntivas en una secuencia de selecciones simples formadas por cada uno de los trminos de la seleccin original. c) Llevar las selecciones lo ms cercano posible a las hojas del rbol, de manera de lograr la ejecucin temprana reduciendo as el nmero de tuplas que se propagan hacia niveles superiores. d) Reemplazar los productos cartesianos seguidos de selecciones por joins. Evitar en la medida de lo posible los productos cartesianos. Si se tiene un producto cartesiano seguido de una seleccin con un predicado p sobre atributos que determinan un join sobre ese predicado p, se descarta el rbol con las dos operaciones por separado. De esta manera se evita propagar resultados intermedios muy voluminosos. e) Descomponer las listas de atributos de las proyecciones y llevarlas lo ms cercano posible a las hojas del rbol, creando nuevas proyecciones cuando sea posible de manera de no propagar hacia niveles superiores atributos innecesarios. De esta manera se logra una reduccin temprana del tamao de las tuplas, y se reduce la cantidad de bloques necesaria para almacenamiento intermedio. f) Realizar primero los joins ms selectivos, de manera de reducir el tamao de los resultados intermedios.

Pgina 26

Bases de Datos

Procesamiento y Optimizacin de Consultas

g) Utilizar como outer (externas) las relaciones ms selectivas Al planear los rboles, tender a utilizar como relacin outer de los joins a aquellas que sean ms selectivas, es decir, aquellas en que su selectividad sea menor. h) En cada nodo, retener los planes menos costosos, pero considerar tambin los rdenes interesantes Al analizar el costo de un nodo intermedio, retener para niveles superiores del rbol los subplanes de menor costo. En caso de que haya alguno cuyo resultado intermedio est en algn orden interesante, retener adems el de menor costo para ese orden. i) Tener en cuenta los ndices interesantes al momento de generar los planes de ejecucin. En muchas ocasiones puede ser importante no bajar al mximo las proyecciones y/o selecciones sobre una relacin, de manera de poder aprovechar el ndice de la relacin en alguna operacin de un nivel superior, y aplicar recin el filtro y/o la proyeccin luego de esta operacin. j) Utilizar el pipeline entre las operaciones siempre que sea posible, de manera de evitar los costos adicionales a causa de dar persistencia a disco a resultados intermedios en forma innecesaria. 7.3 Pasos para la optimizacin Los pasos que seguiremos para la optimizacin de una consulta son los siguientes: 1. Construir el rbol cannico 2. Construir rboles equivalentes alternativos, utilizando alguna heurstica para que no se sobredimensione innecesariamente el espacio de bsqueda del mejor plan 3. Para cada rbol construido, hacer tantos planes de ejecucin como surjan de las diferentes combinaciones interesantes de reemplazar los operadores lgicos por operadores fsicos o algoritmos, indicando en qu casos los resultados intermedios son pipelinizados y si algn resultado queda en un orden interesante 4. Para cada plan concreto de ejecucin, evaluar sus costos totales 5. Elegir el plan que haya resultado con menor costo 7.4 Estrategia de Programacin Dinmica La estrategia segn los pasos mencionados anteriormente puede ocasionar que se tengan que evaluar varias veces las mismas operaciones en el contexto de distintos planes de ejecucin. Se han desarrollado estrategias alternativas que apuntan a superar este problema, la ms utilizada es la llamada estrategia de Programacin Dinmica. La idea bsica de esta estrategia es, dado una consulta de n relaciones vinculadas por la operacin de junta, dividir el anlisis en n pasadas. La pasada i-sima computar los costos de los planes de i relaciones. Cada pasada trabajar incrementalmente aprovechando los resultados generados por la pasada anterior, siguiendo las heursticas correspondientes. En la prctica de la materia no trabajaremos con la estrategia de programacin dinmica.

Pgina 27

Bases de Datos

Procesamiento y Optimizacin de Consultas

8 8.1

Ejemplos Ejemplo 1

Dados los siguientes esquemas de relacin, Empleado (nro-e (4), nombre-e (30), domicilio (24), ciudad (10), dni (8), tel (12), sueldo (8)) Trabaja-en (nro-e, nro-d) Departamento (nro-d (4), nombre-d (20), ubicacin (20), ciudad (10)), donde el nmero asociado a cada atributo representa la cantidad de bytes que ocupa, y considerando que, Tamao de bloque = 4.000 bytes TEmpleado TTrabaja_en TDepartamento I Empleado.ciudad = 100.000 tuplas = 130.000 tuplas = 50 tuplas

= 100 8

I Departamento.ciudad =

Existe un ndice B+ clustered sobre nro-d en Departamento Existe un ndice B+ unclustered sobre ciudad en Departamento Existe un ndice B+ clustered sobre nro-e en Empleado Existe un ndice B+ clustered sobre nro-d en Trabaja-en (en este ejemplo consideramos despreciable el costo de acceso a ndices), Bloques disponibles en memoria principal = 3, Optimizar la siguiente consulta en SQL y calcular el costo de su ejecucin, analizando distintos planes de evaluacin. Es necesario, adems, conocer el costo de escribir el resultado de la consulta en disco. SELECT FROM WHERE nro-e, nombre-e Departamento D, Trabaja-en T, Empleado E D.nro-d = T.nro-d and T.nro-e = E.nro-e and D.ciudad = Mendoza;

Pgina 28

Bases de Datos

Procesamiento y Optimizacin de Consultas

Resolucin: En primer lugar, optimizamos algebraicamente la consulta, y para esto, convertimos la expresin en SQL al lgebra Relacional.

E.nro_e,nombre_e( D.nro_d=T.nro_d ^ ( D |X| T |X| E ) ) T.nro_e=E.nro_e ^ D.ciudad=Mendoza donde D representa Departamento, T representa Trabaja_En, y E Empleado. A continuacin se presenta el rbol cannico de la consulta y un rbol optimizado, que surge de aplicar las reglas de equivalencia algebraicas (se pueden obtener varios rboles optimizados a partir del rbol inicial). rbol Cannico

E.nro_e,nombre_e

D.nro_d=T.nro_d ^ T.nro_e=E.nro_e ^ D.ciudad=Mendoza

X
Empleado E

Departamento D

Trabaja_En T

Pgina 29

Bases de Datos

Procesamiento y Optimizacin de Consultas

rbol Optimizado

|X|

nro_e

nro_e,nombre_e

|X|

Empleado E Trabaja_En T

nro_d

ciudad=Mendoza

Departamento D Una vez obtenidos los pasos para resolver la consulta (surgen del rbol optimizado), calcularemos el costo de ejecutarla, considerando distintos planes de resolucin.

8.1.1.1 Clculos adicionales Longitud tupla Departamento: LD = 4 by + 20 by +20 by + 10 by LD = 54 by Bloques que ocupa Departamento: FBD = [tam_bloque / LD] = [4000 by/bloque / 54 by/tupla] = 74 tuplas/bloque BD = [TD / FBD] = [50 / 74] ([] por exceso) BD = 0,67 BD = 1 Bloque

Longitud tupla Trabaja_En: LT = 4 by + 4 by LT = 8 by Bloques que ocupa Trabaja_En: FBT = [tam_bloque / LT] = [4000 by/bloque / 8 by/tupla] = 500 tuplas/bloque BT = [TT / FBT ] = [130000/500] ([] por exceso) BT = 260 Bloques

Pgina 30

Bases de Datos

Procesamiento y Optimizacin de Consultas

Longitud tupla Empleado: LE = 4 by +30 by + 24 by +10 by + 8 by +12 by + 8 by LE = 96 by Bloques que ocupa Empleado: FBE = [tam_bloque / LE] = [4000 by/bl / 96 by/t]= 41 tuplas/bl BE = [TE / FBE ] = [100000 / 41] ([] por exceso) BE = 2440 Bloques 8.1.1.2 Costo de ejecucin 1) Clculo del costo ciudad=Mendoza( Departamento) [C] a) Sin ndice (file scan): C = BD C = 1 acceso b) Utilizando el ndice unclustered sobre ciudad en Departamento Veamos cuntas tuplas correspondern a la ciudad de Mendoza. Considerando una distribucin uniforme de los datos, TDepartamento, ciudad=Mendoza = TD / I Departamento.ciudad = 50 tuplas / 8 = 6,25 TDepartamento, ciudad=Mendoza = 7 tuplas Como estamos utilizando un ndice unclustered, tendremos un acceso por cada tupla. C = 7 accesos Observamos claramente en este caso, que el uso del ndice no nos es til, y por lo tanto no lo utilizamos. Entonces, tomamos como costo de la seleccin el encontrado en a), C = 1 acceso que constituye el costo de lectura. De esta manera queda definido file scan como camino o mtodo de acceso a Departamento. Como en memoria principal tenemos disponibles 3 bloques, uno de ellos lo utilizamos para la carga de la relacin Departamento (recordar que ocupa 1 bloque). 2) Clculo del costo de la junta ciudad=Mendoza( Departamento) |X| Trabaja_En) [C |X| T] La junta se realizar por el atributo clave de la tabla resultante de la seleccin. Como hay 3 bloques disponibles en memoria principal, utilizaremos: 1 bloque para Departamento que ya est en memoria 1 bloque para ir leyendo las tuplas de Trabaja_En 1 bloque para ir guardando el resultado de la junta a) Sin ndice: C |X| T = BD (ya ledo) + BT (a leer),

Pgina 31

Bases de Datos

Procesamiento y Optimizacin de Consultas

pues se compara cada bloque de Departamento con cada bloque de Trabaja_En. En este caso el mtodo de junta utilizado es Block Nested Loops Join (BNLJ), cuando una de las relaciones participantes entra toda en memoria. C |X| T = 260 accesos b) Utilizando el ndice de agrupamiento sobre nro_d en Trabaja_En Estimemos la cantidad de empleados por departamento en Trabaja_En, como TTdepto = TT / I Trabaja_en.nro_d = 130000 tuplas / 50 TTdepto = 2600 tuplas/depto La cantidad de valores distintos para el atributo nro_d en Trabaja_En es, como mximo, igual a la cantidad de tuplas en Departamento, ya que nro_d es clave de esta relacin y clave fornea en Trabaja_en. No olvidar que para el clculo se consider una distribucin uniforme de los datos. De esta forma, tendremos aproximadamente 2600 tuplas por cada departamento, en la relacin Trabaja_En, agrupadas en BTdepto = [TTdepto / FBT] = BTdepto = 6 Bloque/depto Luego, por cada departamento de la ciudad de Mendoza (resultado de la seleccin), se debern realizar 6 accesos sobre Trabaja_En, para recuperar los empleados de ese departamento, con lo cual, utilizando el ndice clustered, tendremos un costo de C |X| T = TDepartamento, ciudad=Mendoza * BTdepto = 7 depto
*

([] por exceso)

= [2600 tuplas/depto / 500 tuplas/Bloque]= [5,2]

6 Bloque/depto

C |X| T = 42 accesos Para resolver esta junta hemos utilizado el mtodo Index Nested Loops Join (INLJ), descontando el costo de lectura de la relacin externa (seleccin por ciudad=Mendoza), pues ya estaba en memoria. Finalmente elegimos la utilizacin del ndice clustered sobre nro_d en Trabaja_En (INLJ) para resolver la junta, ya que disminuye la cantidad de accesos notablemente en comparacin con la estrategia sin ndices (BNLJ). Debemos tener en cuenta, que en los puntos a) y b) el costo calculado fue el de lectura, con lo cual C |X| T (Lectura) = 42 accesos 3) Clculo de la proyeccin nro_e(C |X| T) Si tuviramos los suficientes bloques en memoria como para guardar el resultado de la junta, no habra costo de escritura. En nuestro caso, slo tenemos disponible 1 bloque de memoria. Veamos cunto ocupa el resultado de la operacin. T |X| T = TDepartamento, ciudad=Mendoza * TTdepto = 7 depto
*

2600 tuplas/depto

T |X| T = 18200 tuplas Observamos en el rbol optimizado que al resultado de la junta se le aplica una operacin de proyeccin. Podramos realizar esta operacin a medida que se calculan las tuplas de la junta (pipeline).

Pgina 32

Bases de Datos

Procesamiento y Optimizacin de Consultas

De esta forma, cada una de las tuplas en el resultado, estar formada por un nico atributo, nro_e, y por lo tanto, la longitud de cada tupla ser L ( |X| T) = 4 by y la cantidad de bloques que stas ocupan ser FB=[tam_bloque/ L ( |X| T)] = [4000/4]= 1000 tuplas/bloque B ( |X| T) = [T |X| T / FB] ([] por exceso) = [18200 tuplas / 1000 tuplas/Bloque]=[18,2] B ( |X| T) = 19 bloques con lo cual, guardaremos el resultado en disco (materializacin) para ambas estrategias a) y b), con un costo de escritura asociado de C ( |X| T) (Escritura) = B ( |X| T) C ( |X| T) (Escritura) = 19 accesos

Cabe aclarar que no estamos considerando valores duplicados en el resultado. Teniendo en cuenta que la imagen de nro_e en Empleado es 100000 (igual a la cantidad de tuplas ya que es atributo clave), y que la cantidad de tuplas resultado de la primera junta es 18200, en el peor caso correspondern a valores distintos para el atributo nro_e. Finalmente, el costo total de la primera junta es, C |X| T = C |X| T (Lectura) + C ( |X| T) (Escritura) C |X| T = 42 accesos + 19 accesos C |X| T = 61 accesos 4) Clculo del costo de la segunda junta (C ( |X| T) |X| E) Veamos cunto ocupa cada una de las relaciones participantes: Resultado de la primera junta B ( |X| T) = 19 bloques Tabla Empleado BE = 2440 bloques Como hay 3 bloques disponibles en memoria principal, utilizaremos: 1 bloque para ir leyendo el resultado de la primera junta (que ha sido materializada) 1 bloque para ir leyendo las tuplas de Empleado 1 bloque para ir guardando el resultado de la junta a) Sin ndice: C ( |X| T) |X| E = B ( |X| T) + B ( |X| T) * BE, pues se compara cada bloque resultado de la primera junta con cada bloque de Empleado. Utilizamos aqu la estrategia BNLJ, eligiendo como relacin externa (es decir, se lee una sola vez) al resultado intermedio materializado ( |X| T). C( |X| T) |X| E = 46379 accesos b) Utilizando el ndice de agrupamiento sobre nro_e en Empleado

Pgina 33

Bases de Datos

Procesamiento y Optimizacin de Consultas

Por cada tupla resultado de la primera junta, tendremos un acceso a la tabla Empleado, a travs de su atributo clave nro-e, y del ndice de agrupamiento (tener en cuenta que los nro-e en la tabla resultado de la primera junta no tienen por qu estar ordenados). En este caso estaramos utilizando una estrategia INLJ. C ( |X| T) |X| E = T ( |X| T) C( |X| T) |X| E = 18200 accesos Observamos que la utilizacin del ndice ha dado mejores resultados para la ejecucin de la segunda junta. Debemos tener en cuenta, que en los puntos a) y b) el costo calculado fue el de lectura, con lo cual C ( |X| T) |X| E (Lectura) = 18200 accesos que es el costo asociado a la segunda junta. 5) Clculo del costo total de la consulta (Cconsulta) Cconsulta=C + C |X| T (Lectura) + C ( |X| T) (Escritura) + C ( |X| T) |X| E (Lectura) Cconsulta = 1 acceso + 42 accesos + 19 accesos + 18200 accesos Cconsulta = 18262 accesos De esta manera, el plan de evaluacin seleccionado para resolver la consulta es el siguiente:

(INLJ) (materializacin)

(pipeline)

nro_e

nro_e,nombre_e
(Indice clustered nro_e)

(INLJ)

Empleado E

nro_d
(pipeline)

Trabaja_En T
(Indice clustered nro_d)

ciudad=Mendoza
(File scan)

Departamento D

6) Clculo del costo de escritura del resultado final Veamos cunto ocupa el resultado de la consulta, para calcular el costo de escritura. Como cada tupla de la tabla resultado de la primera junta, tendr asociada una nica tupla en Empleado, la cantidad de tuplas que resultan de la segunda junta sern

Pgina 34

Bases de Datos

Procesamiento y Optimizacin de Consultas

T ( |X| T) |X| E = T ( |X| T) = 18200 tuplas Esta vez, cada tupla estar formada por los atributos nro-e y nombre-e, con lo cual L ( |X| T) |X| E = 4 by + 30 by L ( |X| T) |X| E = 34 by ocupando, en total, FBRES=[tam_bloque/L (|X|T)|X|E]=[4000/34]=117 tuplas/bloque B ( |X| T) |X| E =[ T ( |X| T) |X| E / FBRES] = [18200 tuplas / 117 tuplas/Bloque]= B ( |X| T) |X| E = 156 bloques Entonces, el costo de escritura asociado es de C ( |X| T) |X| E (Escritura) = B ( |X| T) |X| E C( |X| T) |X| E (Escritura) = 156 accesos ([] por exceso)

PARA RESOLVER: Definir otro plan de evaluacin de la consulta, tratando de disminuir el costo calculado en el ejemplo (si es necesario puede considerar otros ndices).

Pgina 35

Bases de Datos

Procesamiento y Optimizacin de Consultas

8.2

Ejemplo 2

Esquema Libros (ISBN, Titulo, tipo, precio) Ventas (cod_lib, nro_venta, fecha_venta, ISBN) Librerias(cod_lib, nombre_lib, telefono, dir_lib, ciudad, provincia) Datos Todos los campos de todas las tablas tienen una longitud de 128 bytes. La longitud del bloque (LB) es 2048 bytes. Hay 3 bloques de memoria. Las tablas contienen la siguiente cantidad de registros: Libreras: 200 registros Libros: 2.000 registros Ventas: 200.000 registros

Se tiene un ndice secundario I1 de tres niveles para la tabla Libreras (x=3) segn la clave primaria Se asume que: Los ttulos de los libros no se repiten El 50% de los registros corresponden a ventas desde ao 1995 Se asume distribucin uniforme de los datos Consulta Las libreras que vendieron la publicacin Cien aos de soledad desde el ao 95. SELECT nombre_lib FROM Libros L1, Librerias L2, Ventas V WHERE L1.ISBN = V.ISBN AND V.cod_lib = L2.cod_lib AND L1.Titulo = Cien aos de soledad AND V.fecha_venta >= 01/01/1995

Pgina 36

Bases de Datos

Procesamiento y Optimizacin de Consultas

Arbol cannico

Operaciones fsicas disponibles:

scan (materializacin), pipeline

nombre_lib

scan (materializacin), pipeline

L1.ISBN = V.ISBN and V.cod_lib = L2.cod_lib and L1.Titulo = Cien aos de soledad and V.fecha_venta >= 01/01/1995

BNLJ, INLJ (I1), SMJ

X
BNLJ, SMJ

VENTAS V

LIBROS L1

LIBRERIAS L2

Pgina 37

Bases de Datos

Procesamiento y Optimizacin de Consultas

Optimizacin del rbol Paso 1) Descomponer las selecciones

nombre_lib

L1.ISBN = V.ISBN

V.cod_lib = L2.cod_lib

Titulo = Cien aos de soledad

fecha_venta >= 01/01/1995

L1

L2

Pgina 38

Bases de Datos

Procesamiento y Optimizacin de Consultas

Paso 2) Llevar las selecciones hacia las hojas nombre_lib L1.ISBN = V.ISBN

V.cod_lib = L2.cod_lib

fecha_venta >= 01/01/1995 Titulo = Cien aos de soledad L2

L1

Paso 3) Permutar las relaciones de las hojas para evitar productos cartesianos, tratando de realizar primero las operaciones ms selectivas. nombre_lib

V.cod_lib = L2.cod_lib

fecha_venta >= 01/01/1995 L1.ISBN = V.ISBN

L2

Titulo = Cien aos de soledad

L1

Pgina 39

Bases de Datos

Procesamiento y Optimizacin de Consultas

Paso 4) Fusionar en join los productos cartesianos seguidos de selecciones que determinan condicin de join nombre_lib

fecha_venta >= 01/01/1995

L2

Titulo = Cien aos de soledad

L1 Paso 5) Agregar proyecciones que restrinjan los atributos que se propagan a la mnima expresin necesaria

Pgina 40

Bases de Datos

Procesamiento y Optimizacin de Consultas

Operaciones fsicas disponibles:

Como vimos, hay varios rboles posibles, nosotros generamos slo dos en este caso, el cannico y uno optimizado. Para cada uno de esos dos rboles, podemos tener varias combinaciones de operaciones fsicas disponibles para cada operador algebraico. Las distintas combinaciones vlidas de las distintas operaciones fsicas disponibles, nos permitiran generar los diferentes planes de ejecucin a fin de calcular los costos. Aqu vamos a elegir dos planes de ejecucin, uno basado en el rbol cannico, y otro basado en nuestro rbol optimizado. Llamaremos Plan de Ejecucin 1 (PE1) al siguiente:

Pgina 41

Bases de Datos

Procesamiento y Optimizacin de Consultas

Pgina 42

Bases de Datos

Procesamiento y Optimizacin de Consultas

Llamaremos Plan de Ejecucin 2 (PE2) al siguiente:

Pgina 43

Bases de Datos

Procesamiento y Optimizacin de Consultas

Clculo de costos Clculo de datos generales: Libros(L1): LL1 = cantidad_campos * tam_campo = 128 * 4 = 512 FBL1 = [tam_bloque / longitud_tupla] = 2048 / 512 = 4 TL1 = 2.000 BL1 = [cantidad_registros / factor_bloqueo_relacin] = 2.000 / 4 = 500 Libreras(L2): LL2 = 128 * 6 = 768 FBL2 = [2048 / 768] = 2 TL2 = 200 BL2 = 200 / 2 = 100 Ventas(V): LV = 128 * 4 = 512 FBV = 2048 / 512 = 4 TV = 200.000 BV = 200.000 / 4 = 50.000

Caractersticas del resultado Sea Q la relacin resultado LQ = 128 * 1 = 128 FBQ = LB / LQ = [ 2048 / 128 ] = 16 Ahora, estimemos los registros devueltos. Para ello usaremos algunos clculos auxiliares: Llamemos p al predicado de la seleccin. Podemos observar que p es de la forma ( pL1 ^ pV ^ pL1,V ^pL2,V ), donde pR denota un predicado que afecta slo a atributos de R y pR,S slo a atributos de R y de S. Utilizando operaciones algebraicas podremos ver que P(L1 X L2 X V) = (PL1(L1) |X|PL1,V PV(V)) |X|PL2,V L2 Calculemos por partes: Sea Q1 = PL1(L1) TQ1 = TL1/IL1,TITULO = 2000 / 2000 = 1 Sea Q2 = PV(V) TQ2 = sel(pv) * TV = 0.5 * 200000 = 100000 Sea Q3 = Q1 |X|PL1,V Q2 TQ3 = ( TQ1 * TQ2 ) / max ( IQ1,ISBN, IQ2.ISBN)

Pgina 44

Bases de Datos

Procesamiento y Optimizacin de Consultas

= (1 * 100000) / max (1, 2000) = 50 Ahora queda Q = Q3 |X|PL2,V L2 TQ = ( TQ3 * TL2 ) / max(IQ3,cod_lib, IL2,cod_lib) {como Q3.cod_lib es FK IL2.codlib >= IQ3.cod_lib} = (50 * 200 ) / 200 = 50 Vemoslo informalmente: Usando que estn distribuidos uniformemente, asumimos #ventas / #libros da la cantidad de ventas que corresponden a cada libro (por lo tanto, Cien aos de soledad tiene esa cantidad de ventas). Como se supone que la mitad de las ventas son desde el 95 (dato), la cantidad anterior la divido por 2. (#ventas/#libros) / 2 = (200.000 / 2.000) / 2 = 50 Por lo tanto TQ = 50 BQ = TQ / FBQ = 50 / 16 = 4 Calcularemos los costos sobre los dos planes de ejecucin elegidos Costo del plan elegido sobre el rbol cannico: Paso 1) (L1 x L2) Block Nested Loops Join CI (costo de input) = BL1 + BL2 * BL1 = 500 + 100*500 = 50.500 Llamemos L = L1 x L2 y calculemos sus datos: LL = 128 * (4+6) = 1280 FBL = [2048 / 1280] = 1 TL = 2.000 * 200 = 400.000 BL = 400.000 / 1 = 400.000 CO (costo de output) = BL CTpaso1 = CI + CO = 450.500 accesos Paso 2) L x Ventas Block Nested Loops Join CI = BL + BV * BL = 400.000 + 400.000 * 50.000 = 2.000.400.000 Llamemos L = L x V y calculemos sus datos: LL = 128 * (10+4) = 1792 FBL = [2048 / 1792] = 1 TL = 400.000 * 200.000 = 80.000.000.000 BL = 80.000.000.000/ 1 = 80.000.000.000 CO = BL CTpaso2 = CI + CO = 82.000.400.000 accesos

Pgina 45

Bases de Datos

Procesamiento y Optimizacin de Consultas

Paso 3) Seleccin File scan CI = BL Llamemos L a separado). LL = 128 * 1 = 128 FBL = 2048 / 128 = 16 TL = 50 (es el valor que calculamos antes) BL = [50/16] = 4 CO = 4 Como es la operacin de la raz, no computaremos el costo del output CTpaso3 = CI + CO = 80.000.000.000 accesos Si pasos obtenemos sumamos los costos de los 3
nombre_lib

((L)) (aqu la proyeccin la hacemos on the fly y no como otro paso

Calculemos los datos de L:

COSTO TOTAL = 162.000.850.504 accesos

Costo del plan elegido sobre el rbol optimizado Paso 1) Seleccin por ttulo File scan CI = BL1 = 500 Devuelve un slo registro. Adems, proyecto el ISBN on the fly. Llamemos L = ISBN((L1)) y calculemos sus datos: LL = 128 * 1 = 128 FBL = 2048 / 128 = 16 TL = 1 BL = 1 CO = BL = 1

CTpaso1 = CI + CO = 501 accesos

Pgina 46

Bases de Datos

Procesamiento y Optimizacin de Consultas

Paso 2) L x Ventas Block Nested Loops Join. Luego se proyectan cod_lib y fecha_venta on the fly, ya que elegimos pipeline para esa operacin. Tal como hicimos en el clculo de costos del rbol cannico, usamos que estn distribuidos uniformemente y asumimos que #ventas / #libros da la cantidad de ventas que corresponden a cada libro. CI = BL + BV * BL = 1 + 1* 50.000 = 50.001 Llamemos L = cod_lib, fecha_venta(L x V) y calculemos sus datos: LL = 128 * 2 = 256 FBL = 2048 / 256 = 8 TL = #ventas / #libros = 200.000/2.000 = 100 BL = [100/8] = 13 CO = BL = 13 CTpaso2 = CI + CO = 50.014 accesos

Paso 3) Seleccin por fecha File scan. Se proyecta slo cod_lib. Se queda con la mitad de los registros del paso anterior (dato) CI = BL = 13 Llamemos L = cod_lib((L)) y calculemos sus datos: LL = 128 * 1 = 128 FBL = 2048 / 128 = 16 TL = TL /2 = 100/2 = 50 BL = [50/16] = 4 CO = BL = 4 CTpaso3 = CI + CO = 17 accesos

Paso 4) L x Librera Index Nested Loops Join, usando el ndice de la clave primaria de librera. Luego, se vuelve a proyectar un atributo on the fly. La cantidad de tuplas resultado se mantiene ya que se hace el join slo para recuperar el nombre de la librera. CI = BL + TL (XI1+1) = 4 + 50 (3 + 1) = 204 Por cada tupla de L se va a buscar un index entry dentro del ndice I1 de L2. Como es un ndice primario, habr slo un index entry y se deber buscar un solo bloque de L2 para traer la librera correspondiente. Llamemos L = nombre_lib(L x L2) y calculemos sus datos:

Pgina 47

Bases de Datos

Procesamiento y Optimizacin de Consultas

LL = 128 * 1 = 128 FBL = 2048 / 128 = 16 TL = TL = 50 BL = [50/16] = 4 CO = BL = 4 CTpaso4 = CI + CO = 208 accesos Si sumamos los costos de los 3 pasos obtenemos

COSTO TOTAL = 50740 accesos

Como vemos, el costo total del plan elegido del rbol cannico es ms de 3 millones de veces ms costoso que el del plan elegido del rbol optimizado. Para hacerlo ms grfico, si suponemos que tenemos capacidad para realizar 1 acceso a disco cada microsegundo, y que toda otra operacin consume tiempo 0, la ejecucin de la consulta con el plan elegido sobre el rbol optimizado tardara 0.05 segundos, en tanto que con el plan elegido sobre el rbol cannico tardara 45 horas!!!

Pgina 48

Bases de Datos

Procesamiento y Optimizacin de Consultas

Bibliografa Database Management Systems R. Ramakrishnan; J. Gehrke Mc Graw-Hill - 3 edicin Principles of Database and Knowledge Base Systems, J. Ullman; Computer Science Press, 1988 Fundamentos de Bases de Datos A. Silberschatz; H. Korth; S. Sudarshan Mc Graw-Hill 3 Edicin Material del curso Architecture and Implementarion of Database Management Systems Prof Dr. Marc . Scholl University of Konstantz Winter 2006-2007 Material del curso 15-415 - Database Applications C. Faloutsos Carnegie Mellon University An Overview of Query Optimization in Relational Systems Surajit Chaudhuri Proceedings of the seventeenth ACM SIGACT-SIGMOD-SIGART symposium on Principles of database systems - 1998

Pgina 49

También podría gustarte