Optimización de consultas Bases de datos II: Tema 7 BDII 1 Estructura del tema 1. 2. 3. 4. Introducción: un ejemplo motivador. Panorama general del procesamiento de consultas. Algoritmos básicos para ejecutar operaciones de consulta. Transformación de expresiones relacionales: reglas de equivalencia. 5. Optimización de consultas: 1. Uso de la heurística 2. Uso de las estadísticas de la BD. 6. Bases de datos estadísticas. 7. Optimización semántica de consultas. BDII 2 1 Un ejemplo motivador Objetivo: seleccionar una estrategia eficiente para la evaluación de una expresión relacional dada. En las BDS se utilizan lenguajes no procedurales para interrogarlas: se dice lo que se busca pero no como hacerlo. El SGBD es el responsable de determinar como se accede a la información y construir una buen plan de ejecución. Nota: el nombre optimizador de consultas no es en realidad muy apropiado puesto que no se encuentra una estrategia óptima, únicamente mejor (más eficiente) que la original. BDII 3 Un ejemplo motivador… Supongamos BD proveedores y partes: V( V#, proveedor, estado, ciudad) P(P#, parte, color, peso, ciudad) VP( V#,P#,cantidad) Consulta: obtener el nombre de los proveedores que proporcionan la parte ‘p2’; select proveedor from VP, V where vp.v#=v.v# and v#=‘p2’; Supongamos que la BD contiene 100 proveedores y 10000 envíos, de los cuales 50 son de la parte ‘p2’ BDII 4 2 Estrategia 1: Reunior vp y v (sobre v#) Restringir el resultado del paso 1 a las tuplas ‘p2’. Resultado 50 tuplas Proyectar el resultado del paso 2 sobre proveedor. Resultado 10000 tuplas Estrategia 2: Restringir vp a las tuplas para la parte ‘p2’ Resultado (50 tuplas) Reunir el resultado del paso 1 con la tabla v (sobre v#) Involucra leer 100 proveedores y produce un resultado de 50 tuplas Proyector el resultado del paso 2 sobre proveedor. BDII 5 1 Ejemplo motivador… Resultado: si tomamos la cantidad de E/S como medida de eficiencia Estrategia 1: 1.030.000 tuplas(1000000+3*10000) Estrategia 2: 10.100 tuplas (10000+100) Estrategia más eficiente Conclusión: parece preferible restringir antes de reunir y se pueden incluso incluir otras mejoras en caso de que algunos de los atributos anteriores estuvieses indexados. BDII 6 3 2. Panorama general Se pueden identificar cuatro etapas en el procesamiento de consultas. 1. Convertir la consulta a su forma interna 2. Convertir a la forma canónica. 3. Seleccionar procedimientos candidatos de bajo nivel. 4. Generar planes de consulta y seleccionar el más barato BDII 7 2. Panorama general [Etapa 1:]Convertir la consulta a su forma interna: Conversión de la consulta original en alguna forma que sea más adecuado para manejarla internamente. Por lo general se utiliza algún tipo de árbol como son los árboles de consulta (árbol algebraico de la expresión algebraica que representa la consulta) select apellido, nombre from empleado where salario> (select max(salario) from empleado where numd =5) = c FMAX(SALARIO) (rnumd= 5 (empleado) Papellido,nombre (Rsalario>c (empleado) BDII 8 4 2. Panorama general… [Etapa 2:]Conversión a la forma canónica El optimizador realiza varias optimizaciones que son garantizadas como buenas sin tener en cuenta los valores actuales de la BD. Se aplican ciertas reglas de transformación para conseguirlas. Veremos el conjunto de reglas después. [Etapa 3:] Selección de procedimientos candidatos de bajo nivel. Se decide como debe ejecutar dicha consulta transformada a su forma interna. Se tienen en cuenta las diversas rutas de acceso al dato, el agrupamiento físico de los datos, las distribuciones de valores de los datos. La estrategia básica consiste en especificar una serie de operaciones de bájo nivel (reunir, restringir, resumir…). Para cada una de estas operaciones existen diferentes algoritmos implementados predefinidos con diferentes funciones de coste. BDII 9 2. Panorama general … [Etapa 4:] Generación de los planes de consulta y selección del más barato. En general pueden haber demasiados planes por lo que se construyen únicamente algunos que por heurística son más barato (restringimos el espacio de búsqueda) y se elige el mejor de ellos. Se utilizan funciones de costo asociadas a cada procedimiento que en general dependen del tamaño de las tablas. El optimizador necesitará alguna forma de deducir tamaños de los resultados intermedios. (Estadísticas de la BD) BDII 10 5 2. Panorama general… Consulta Original Procesador DML BD Consulta Compilada Metadatos Optimizador BD Plan de Consulta Datos Administrador en Tiempo de ejec. Análisis sintáctico, Procesamiento de Vistas, traducción Expresión de Álgebra relacional Transformación de la expresión, estimación de costes… Código optimizado Ejecución Resultado BDII 11 Algoritmos básicos para ejecutar operaciones de consulta Un SGBD debe contar con algoritmos para implementar los distintos tipos de operaciones relacionales: Ordenación Selección Reunión Operaciones de agregación Operaciones de conjuntos BDII 12 6 3. Implementación operaciones… Ordenación El algoritmo de ordenación es básico en el procesamiento de consultas. Se necesita cuando: Resultado ordenador (ORDER BY) Se desean eliminar duplicados (DISTINC) Operaciones de reunión Y operaciones de conjuntos. El algoritmo habitual para grandes ficheros de datos consiste en la estrategia ordena-mezcla que va ordenando pequeños ficheros y después los mezcla. El coste de estos algoritmos corresponde al coste de la ordenación (a*log(a)) y el coste de la mezcla (a+b). BDII 13 Restricción: Métodos de búsqueda para condición simple. Búsqueda lineal Empleo de un índice Métodos de búsqueda para condición compleja Condiciones conjuntivas: Selección conjuntiva empleando un índice individual Selección conjuntiva con un índice compuesto. Selección conjuntiva por intersección de punteros a registros Condiciones disyuntivas: En este caso poco se puede optimizar. BDII 14 7 Empledo(nss,nombre,apellido,inic, fecha_naci, sexo, salario,nss_superv, nd) Departamento(numerod, nombred, nss_jefe, fecha_inic_jefe) Proyecto(numerop,nombrep,localizacionp,numd) Trabaja_en(nsse,np,horas) Op1: empleado.NSS = ‘1223567’ Op2: departamento.numerod > 5 Op3: empleado.nd=5 Op4: empleado.Nd =5 and empleado.salario>3000 and empleado.sexo =‘M’ Op5: trabaja_en.nsse=‘123456’ and trabaja_en.np=10 Se busca la mejor via de acceso a los datos: si Existe un índice se utiliza y si no se accede Secuencialmente. Si la condición es compleja, se Accede en primer lugar a la condición más restrictiva. Por ejemplo en Op4 se elegiría la más restrictiva BDII 15 Reunión: es una de las operaciones más costosas. Reunión de bucle anidado ( secuencial) Reunión por bucle único (cuando existe alguna estructura de acceso (índice) para extraer los registros coincidentes) Reunión por ordenación-mezcla. Primero se ordenan las relaciones implicadas y después se mezclan. Reunión por dispersión: una de las relaciones operando se dispersa por el atributo de reunión y después se accede secuencialmente a la otra relación. Reunión con índice es una de las relaciones operando: la relación que no está indexada se accede secuencialMente y para cada tupla se accede a la otra relación a través del índie. Reunión con índice en las dos relaciones: se mezclan los dos índices para conseguir un conjunto de parejas (TID1,TID2) de tuplas coincidentes. Reunión por índice de reunión: es un índice especial para la realización de reuniones. BDII 16 8 Operaciones de agregación. Cuando los operadores de agregación (MIN, MAX,COUNT, AVERAGE, SUMA), se pueden calcular mediante un acceso secuencial o mediante el índice adecuado. Ejemplo: Si existe Índice en el campo Salario se puede Utilizar para encontrar El máximo select max(salario) from empleados; BDII 17 Operaciones de conjuntos. Estas operaciones tienen implementaciones costosas (union, intersección, diferencia de conjuntos y producto cartesiano). La operación producto cartesiano debe evitarse por su elevado coste. Las otras tres operaciones en general se implementan mediante la técnica ordena mezcla. BDII 18 9 Transformaciones de expresiones de álgebra relacional. Una misma consulta en álgebra relacional se puede expresar de varias formas equivalentes. Para ello se utilizan las siguientes reglas de equivalencia. 1. 2. 3. 4. Cascada de restricciones: una condición de restricción conjuntiva puede descomponerse en una secuencia de operaciones de restricción individuales. Conmutativad de la restricción. Cascada de proyecciones: en una cascada de proyecciones podemos ignorar todas menos la última Conmutatividad entre restricción y proyección. Si la proyección se realiza sobre [a1…an] y la restricción sobre b1, entonces se debe proyectar sobre el atributo sobre el que se realiza la restricción. BDII 19 Transformaciones 5. 6. 7. 8. 9. 10. 11. Conmutatividad de la reunión. Conmutatividad de la restricción y la reunión. Conmutación de la proyección con la reunión: supongamos que la lista de proyecciones es L=[a1,…an]. Si la reunión se realiza sobre un atributo bi entonces la conmutación implica proyecciones adicionales sobre el atributo de reunión. Conmutatividad de las operaciones de conjuntos: la operación unión e intersección son conmutativas. La resta no. Asociatividad de la reunión, y las operaciones de conjuntos siguientes: unión, intersección y producto cartesiano. Conmutación de restricción y operaciones de conjuntos. La proyección se conmuta con la unión BDII 20 10 Optimización de consultas: representación de la consulta La consulta expresada en cálculo relacional se debe tranformar en una representación interna para que el SGBD la optimice. La consulta en cálculo relacional se pasa a álgebra relacional. Para la representación interna de la expresión de álgebra relacional se utiliza una estructura de datos árbol: árbol de consulta. Las hojas del árbol corresponde a las entradas , y las operaciones algebraicas corresponden a nodos internos. BDII 21 Ejemplo: Supongamos la siguiente notación para cada una de las operaciones algebraicas: p1 cond A=B select p.nmerop, p.numd,e.apellido, e.direccion, e.fecha_nac from proyecto as p, dpartamento as d, empleado as e where p.numd=d.numerood and d.nss_jefe=e.nsss and p.localizacion=‘Madrid’ Representamos esta consulta con un árbol equivalente de consulta BDII 22 11 Equivalencia de árboles de consulta p.numerop, p.numd, e.apellido e.direccion, e.fecha_nac p.numerop, p.numd, e.apellido e.direccion, e.fecha_nac p.localización= ‘Madrid’ Nss_jefe = nss e.apellido e.direccion, ha_nac Numd =numerod p.numerop, p.numd Nss_jefe = nss E Numd =numerod P localización= ‘Madrid’ P D BDII E numerod D 23 Optimización de consultas: estimación de costes Un optimizador de consultas no depende exclusivamente de reglas heurísticas: comparan los costos de ejcución de consultas con diferentes estrategias de ejecución. Se necesita una función de coste para minimizar. En general, el coste de ejecución de una consulta incluye los siguientes componentes: Costo de acceso al almacenamiento secundario Costo de almacenamiento intermedio Costo de cómputo: coste de ejecutar operaciones en la memoria Costo de comunicación: coste relacionado con enviar la consulta y sus resultados BDII 24 12 Información del catálogo utilizada para la función de coste Para estimar las funciones de coste se necesita cierta información que se mantiene en el catálogo (diccionario de datos) del sistema. Estadísticas sobre la BD: a nivel de relación y a nivel de atributo: Cardinalidad Tamaño tupla Proporción de tupla Que participan en una reunión Dom(A): Cardinalidad del dominio ndist(A):Número actual de valores distintos Max(A) Min(A) Se asume normalmente: independencia entre los diferentes valores del atributo y la distribución uniforme de los valores del atributo en su dominio. BDII 25 Cardinalidad del resultado de una selección es función de la cardinalidad de los operandos y del factor de selectividad de la condición s. Factor de selectividad de una condición: proporción de tuplas en una BD que satisfacen una condición Cardinalidad del resultado de la selección sobre R: S*Card(R) S*Card(R1)^*Card(R2) Estimación exacta del factor s es dificil. Suposiciones típicas: Valores del atributo distribuidos uniformemente Independencia entre atributos. BDII 26 13 Factores de selectividad para la selección: S(A=valor)= 1/ndist(A) S(A>valor) = max(A) –valor/max(A)-min(A) S(A<valor) = valor – min(A)/ max(A) – min(A) S(A in valores) = s(A=valor)*card(valores) S(p and q) =s(P)*s(Q) S(P or Q) = s(P) + s(Q) – [s(P) *s(Q)] Estimaciones más exactas requieren información estadística más detallada (histogramas, distirbuciones de probabilidad) BDII 27 Estimación del factor de seletividad para la reunión no es posible en general Utilización de s=1 (iguala el coste de una reunión al del producto cartesiano). Caso frecuente: reunión basada en la clave de R1 y clave ajena en R2 s=1/card(R2) Se ha demostrado que el plan óptimo para la mayoría de las consultas es insensible a la exactitud del factor de selectividad en la reunión: estimadores no muy exactos son suficientes para la selectividad de la reunión (~1/10) BDII 28 14 Algoritmo por búsqueda exhaustiva Algoritmo para la optimización basado en la búsqueda exhaustiva: Se busca la mejor vía de acceso a una relación para las operaciones de selección. Se consideran dos posibles vías: la más barata sin orden y la más barta que consigue un resultado ordenado. Se selecciona una vía dependidendo de la importancia del orden final. Se analizan las reuniones: cardinalidad del resultado se predice como el producto de la cardinalidad de los operando por el factor de selectividad de la reunión. Se busca el mejor orden para las reuniones. Se considera la mejor via de acceso para la relación. BDII 29 Optimización semántica de consultas Existe un enfoque diferente para la optimización de consultas: optimización semántica de consultas Normalmente se utiliza en combinación con lo anteriormente estudiado. La idea básica consiste en utilizar las restricciones existentes sobre la BD para descartar ciertas consultas cuyo resultado es vacio. Ejemplo: Select e.apellido, g.apellido From empleado as e, empleado as g Where e.nss_superv=g.nss and e.salario> g.salario Esta consulta Obtiene los apellidos de los Empledos que ganan más que sus Supervisores. BDII 30 15