Optimización de Consultas Ejercicios simples Base de Datos, DC-FCEyN-UBA Rosana Matuk 13 de octubre de 2016 Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 1 / 32
Esquema General 1 Introducción 2 Ejercicios simples de Optimización Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 2 / 32
Optimización de Consultas Objetivo Minimizar el tiempo de resolución de la consulta. Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 3 / 32
Algunos tiempos de latencia 1 2 1 Bertrand Meyer, Computing: Art, Magic, Science 2 https://gist.github.com/jboner/2841832 Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 4 / 32
Función de costo a minimizar Debido al gran tiempo de latencia del acceso al disco, en nuestro modelo simplificado, como unidad de costo utilizaremos los accesos a disco (tanto lecturas como escrituras). Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 5 / 32
Estructuras de datos que nos ayudarán a optimizar: ordenar e indexar Archivo sin orden (Heap) Indice Hash Indice Arbol B+ (unclustered) Archivo ordenado Indice Arbol B+ (clustered) Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 6 / 32
Ejemplo de Indice Arbol B + unclustered Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 7 / 32
Ejemplo de Indice Arbol B + clustered Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 8 / 32
Ejemplo Indice Arbol B + clustered, campo compuesto Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 9 / 32
Ejemplo de Indice Hash Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 10 / 32
Resumen Costos de Acceso (del apunte) Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 11 / 32
Cómo resolver un ejercicio de optimización? Pasos: 1 Entender la consulta 2 Pasar de SQL a Algebra Relacional 3 Armar árbol canónico 4 Aplicar heurísticas algebraicas 5 Armar plan de ejecución estimando costos 6 Calcular costos Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 12 / 32
Ejercicios simples de Optimización Idea de los ejercicios Calcular el costo de consultas pequeñas y simples, con un mismo esquema, cambiando de entorno para ver cómo influyen en los accesos a disco. Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 13 / 32
Datos Esquema a utilizar Medico(mId, nombre, especialidad, fechaingreso) Datos tamaño de bloque: 4096 bytes longitud de cada campo: 128 bytes cantidad de tuplas: 1000 Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 14 / 32
Algunos cálculos: longitud tupla M: L M = 128 bytes 4 (registros) = 512 bytes factor de bloqueo de M: FB M = tam_bloque/l M = 4096bytes/512bytes = 8tuplas/bloque cantidad de tuplas: T M = 1000tuplas cantidad de bloques: B M = T M /FB M + 1 = 1000tuplas/8tuplas/bloque + 1 = 126bloques 3 3 Sumamos un bloque adicional por si la relación M comenzase en un bloque semi-ocupado Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 15 / 32
Escenario 1: selección por rango usando HeapFile SELECT * FROM Médico M WHERE "1/1/90" <= fechaingreso AND fechaingreso <= "1/1/91" En álgebra relacional: π (σ 1/1/90 fechaingreso 1/1/91 (M)) Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 16 / 32
Escenario 1: selección por rango usando HeapFile SELECT * FROM Médico M WHERE "1/1/90" <= fechaingreso AND fechaingreso <= "1/1/91" En álgebra relacional: π (σ 1/1/90 fechaingreso 1/1/91 (M)) Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 16 / 32
Escenario 1: selección por rango usando HeapFile π (σ 1/1/90 fechaingreso 1/1/91 (M)) Árbol canónico con su plan de ejecución: Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 17 / 32
Escenario 1: selección por rango usando HeapFile La relación M está organizada internamente como un HeapFile. Por lo tanto sus registros están desordenados. Entonces para ver el costo de una selección por rango hay que recorrer el archivo completo linealmente (file scan). Costo de búsqueda: B M = 126 bloques. Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 18 / 32
Escenario 1: selección por rango usando HeapFile La relación M está organizada internamente como un HeapFile. Por lo tanto sus registros están desordenados. Entonces para ver el costo de una selección por rango hay que recorrer el archivo completo linealmente (file scan). Costo de búsqueda: B M = 126 bloques. Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 18 / 32
Escenario 1: selección por rango usando HeapFile La relación M está organizada internamente como un HeapFile. Por lo tanto sus registros están desordenados. Entonces para ver el costo de una selección por rango hay que recorrer el archivo completo linealmente (file scan). Costo de búsqueda: B M = 126 bloques. Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 18 / 32
Escenario 1: selección por rango usando HeapFile La relación M está organizada internamente como un HeapFile. Por lo tanto sus registros están desordenados. Entonces para ver el costo de una selección por rango hay que recorrer el archivo completo linealmente (file scan). Costo de búsqueda: B M = 126 bloques. Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 18 / 32
Escenario 2: Selección por rango usando índice árbol B + clustered Datos: Misma consulta. Costo de acceso al índice de 3 bloques. Indice sobre el atributo fechaingreso. Asumimos que entre el 1/1/90 y el 1/1/91 ingresaron 200 médicos. Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 19 / 32
Escenario 2: Selección por rango usando índice árbol B + clustered Datos: Misma consulta. Costo de acceso al índice de 3 bloques. Indice sobre el atributo fechaingreso. Asumimos que entre el 1/1/90 y el 1/1/91 ingresaron 200 médicos. Como tenemos un índice que coincide con la clave de búsqueda cambia el plan de ejecución: Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 20 / 32
Escenario 2: Selección por rango usando índice árbol B + clustered Costos? Recordemos que... Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 21 / 32
Escenario 2: Selección por rango usando índice árbol B + clustered Pasos a seguir para calcular el costo: Usamos el índice clustered sobre fechaingreso. Recorremos el índice en busca del primer valor que cumpla con el criterio de selección, bajando niveles en el árbol hasta llegar a la hoja donde se encuentra el puntero al primer bloque de datos (costo: 3 bloques). Leemos en orden (los datos están ordenados físicamente de acuerdo a fechaingreso) (costo: T /FB M + 1 = 200 tuplas/8 tuplas/bloque + 1 = 26 bloques. Costo total: 29 bloques Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 22 / 32
Escenario 2: Selección por rango usando índice árbol B + clustered Pasos a seguir para calcular el costo: Usamos el índice clustered sobre fechaingreso. Recorremos el índice en busca del primer valor que cumpla con el criterio de selección, bajando niveles en el árbol hasta llegar a la hoja donde se encuentra el puntero al primer bloque de datos (costo: 3 bloques). Leemos en orden (los datos están ordenados físicamente de acuerdo a fechaingreso) (costo: T /FB M + 1 = 200 tuplas/8 tuplas/bloque + 1 = 26 bloques. Costo total: 29 bloques Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 22 / 32
Escenario 2: Selección por rango usando índice árbol B + clustered Pasos a seguir para calcular el costo: Usamos el índice clustered sobre fechaingreso. Recorremos el índice en busca del primer valor que cumpla con el criterio de selección, bajando niveles en el árbol hasta llegar a la hoja donde se encuentra el puntero al primer bloque de datos (costo: 3 bloques). Leemos en orden (los datos están ordenados físicamente de acuerdo a fechaingreso) (costo: T /FB M + 1 = 200 tuplas/8 tuplas/bloque + 1 = 26 bloques. Costo total: 29 bloques Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 22 / 32
Escenario 2: Selección por rango usando índice árbol B + clustered Pasos a seguir para calcular el costo: Usamos el índice clustered sobre fechaingreso. Recorremos el índice en busca del primer valor que cumpla con el criterio de selección, bajando niveles en el árbol hasta llegar a la hoja donde se encuentra el puntero al primer bloque de datos (costo: 3 bloques). Leemos en orden (los datos están ordenados físicamente de acuerdo a fechaingreso) (costo: T /FB M + 1 = 200 tuplas/8 tuplas/bloque + 1 = 26 bloques. Costo total: 29 bloques Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 22 / 32
Escenario 2: Selección por rango usando índice árbol B + clustered Pasos a seguir para calcular el costo: Usamos el índice clustered sobre fechaingreso. Recorremos el índice en busca del primer valor que cumpla con el criterio de selección, bajando niveles en el árbol hasta llegar a la hoja donde se encuentra el puntero al primer bloque de datos (costo: 3 bloques). Leemos en orden (los datos están ordenados físicamente de acuerdo a fechaingreso) (costo: T /FB M + 1 = 200 tuplas/8 tuplas/bloque + 1 = 26 bloques. Costo total: 29 bloques Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 22 / 32
Escenario 3: selección por igualdad usando HashTable SELECT * FROM Médico M WHERE especialidad = "traumatología" Datos del ejercicio: índice HashTable sobre el atributo especialidad, el MBxB i = cantidad máxima de bloques que ocupa un bucket del índice i (basado en hashing) es 4 asumimos que hay 100 traumatólogos Pasamos la consulta a álgebra relacional: π (σ especialidad= traumatologia (M)) Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 23 / 32
Escenario 3: selección por igualdad usando HashTable SELECT * FROM Médico M WHERE especialidad = "traumatología" Datos del ejercicio: índice HashTable sobre el atributo especialidad, el MBxB i = cantidad máxima de bloques que ocupa un bucket del índice i (basado en hashing) es 4 asumimos que hay 100 traumatólogos Pasamos la consulta a álgebra relacional: π (σ especialidad= traumatologia (M)) Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 23 / 32
Escenario 3: selección por igualdad usando HashTable π (σ especialidad= traumatologia (M)) Árbol canónico con su plan de ejecución: Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 24 / 32
Escenario 3: selección por igualdad usando HashTable La tabla de hash era: Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 25 / 32
Escenario 3: selección por igualdad usando HashTable Pasos a seguir para calcular el costo: identificar el bucket correspondiente (asumimos costo 0), recorrer todos los bloques del bucket para encontrar los punteros que se corresponden con las tuplas que coinciden con la clave buscada: MBxB i en peor caso (costo 4), acceder tantos bloques de datos como tuplas busquemos, para lo cual hay que leer todos los bloques apuntados por el bucket que coinciden con la clave buscada. Peor caso: cada tupla está en un bloque distinto (costo 100), costo total: 104 Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 26 / 32
Escenario 3: selección por igualdad usando HashTable Pasos a seguir para calcular el costo: identificar el bucket correspondiente (asumimos costo 0), recorrer todos los bloques del bucket para encontrar los punteros que se corresponden con las tuplas que coinciden con la clave buscada: MBxB i en peor caso (costo 4), acceder tantos bloques de datos como tuplas busquemos, para lo cual hay que leer todos los bloques apuntados por el bucket que coinciden con la clave buscada. Peor caso: cada tupla está en un bloque distinto (costo 100), costo total: 104 Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 26 / 32
Escenario 3: selección por igualdad usando HashTable Pasos a seguir para calcular el costo: identificar el bucket correspondiente (asumimos costo 0), recorrer todos los bloques del bucket para encontrar los punteros que se corresponden con las tuplas que coinciden con la clave buscada: MBxB i en peor caso (costo 4), acceder tantos bloques de datos como tuplas busquemos, para lo cual hay que leer todos los bloques apuntados por el bucket que coinciden con la clave buscada. Peor caso: cada tupla está en un bloque distinto (costo 100), costo total: 104 Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 26 / 32
Escenario 3: selección por igualdad usando HashTable Pasos a seguir para calcular el costo: identificar el bucket correspondiente (asumimos costo 0), recorrer todos los bloques del bucket para encontrar los punteros que se corresponden con las tuplas que coinciden con la clave buscada: MBxB i en peor caso (costo 4), acceder tantos bloques de datos como tuplas busquemos, para lo cual hay que leer todos los bloques apuntados por el bucket que coinciden con la clave buscada. Peor caso: cada tupla está en un bloque distinto (costo 100), costo total: 104 Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 26 / 32
Escenario 3: selección por igualdad usando HashTable Pasos a seguir para calcular el costo: identificar el bucket correspondiente (asumimos costo 0), recorrer todos los bloques del bucket para encontrar los punteros que se corresponden con las tuplas que coinciden con la clave buscada: MBxB i en peor caso (costo 4), acceder tantos bloques de datos como tuplas busquemos, para lo cual hay que leer todos los bloques apuntados por el bucket que coinciden con la clave buscada. Peor caso: cada tupla está en un bloque distinto (costo 100), costo total: 104 Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 26 / 32
Escenario 4: selección por rango usando HashTable Qué pasa si tuviésemos una consulta con este tipo de índice, pero por rango? Debemos evaluar el caso, ya que el índice hash es probable que no nos sirva, o que no sea óptimo. Para poder utilizar un índice hash se deben proveer todos los valores de búsqueda. Notar que en una búsqueda por rango no siempre se pueden saber todos los valores posibles comprendidos, ya que en algunos casos pueden ser infinitos. Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 27 / 32
Escenario 5: cuando todo está en el índice Tenemos la consulta: SELECT fechaingreso FROM Médico M WHERE especialidad = "traumatología" Y un índice árbol B + clustered sobre los atributos <Especialidad,FechaIngreso>, que tiene un costo de acceso de 4 bloques. Es decir que el índice está físicamente ordenado por especialidad, y adentro de ese atributo por fechaingreso. Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 28 / 32
Escenario 5: cuando todo está en el índice Gráficamente: Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 29 / 32
Escenario 5: cuando todo está en el índice Pasos a seguir: leemos 4 bloques (la altura del árbol) luego debemos leer N hojas (cantidad de fechas ingreso que cumplen con especialidad traumatología ). Esto puede aumentarnos la cantidad de bloques en memoria. Por simplicidad para los cálculos, asumimos que se lee 1 hoja. costo total: 4 Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 30 / 32
Escenario 5: cuando todo está en el índice Pasos a seguir: leemos 4 bloques (la altura del árbol) luego debemos leer N hojas (cantidad de fechas ingreso que cumplen con especialidad traumatología ). Esto puede aumentarnos la cantidad de bloques en memoria. Por simplicidad para los cálculos, asumimos que se lee 1 hoja. costo total: 4 Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 30 / 32
Escenario 5: cuando todo está en el índice Pasos a seguir: leemos 4 bloques (la altura del árbol) luego debemos leer N hojas (cantidad de fechas ingreso que cumplen con especialidad traumatología ). Esto puede aumentarnos la cantidad de bloques en memoria. Por simplicidad para los cálculos, asumimos que se lee 1 hoja. costo total: 4 Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 30 / 32
Escenario 5: cuando todo está en el índice Pasos a seguir: leemos 4 bloques (la altura del árbol) luego debemos leer N hojas (cantidad de fechas ingreso que cumplen con especialidad traumatología ). Esto puede aumentarnos la cantidad de bloques en memoria. Por simplicidad para los cálculos, asumimos que se lee 1 hoja. costo total: 4 Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 30 / 32
Fin de la clase de Ejercicios Simples de Optimización Tarea para el hogar Estudien el Apunte de Optimización subido en la página. Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 31 / 32
Bibliografía Referencias Apunte de Optimización de la materia. Abraham Silberschatz, Henry F. Korth, S.Sudarshan, "Database System Concepts", Sexta Edición, McGraw-Hill, 2011. Ramez Elmasri, Shamkant Navathe, "Fundamentals of Database Systems", Sexta Edición, Pearson, 2011. Rosana Matuk (DC-FCEyN-UBA) Optimización 13 de octubre de 2016 32 / 32