Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Procesamiento y optimización de consultas 1 UT 1: Introducción a los sistemas de datos UT 2: Diseño conceptual y lógico de las bases de datos UT 3: Esquema de la base de datos. UT 4: Diseño físico y organizaciones de archivos. UT 5: Lenguajes de consulta y actualización de datos. UT 6: Procesamiento y optimización de consultas. UT 7: Procesamiento de transacciones. UT 8: Protección de datos. UT 9: Data warehouse UT 10: Bases de datos distribuidas Programa de la materia Usted está aquí 2 Esquema 1. Procesamiento de consultas 2. El optimizador del DBMS 6. Los Ajustes del Rendimiento 4. Expresiones equivalentes 5. Operaciones Primitivas 3. Plan de ejecución 7. Recursos de hardware 8. DBMS y el esquema 9. Las transacciones A. ¿Cómo funciona el procesamiento de una consulta en un DBMS? B. ¿Cómo mejorar el desempeño de las consultas? 3 Procesamiento de consultas Consulta Resultado de la Consulta SELECT * FROM Empleado INNER JOIN Sucursal on Empleado.Cod_Sucursal = Sucursal.Cod_Sucursal WHERE Empleado.Puesto = ‘gerente’ AND Sucursal.Ciudad = ‘Londres’ Ejecución Datos legajo nombre Apellido Cargo Cod_suc barrio ciudad 10001 Jorge Matow Gerente 10 xxx Londres xxx 000234 Mariana Perez Gerente 15 xxx Londres xxx 05443 Peter Watson Gerente 16 xxx Londres xxx 10076 David Larson Gerente 18 xxx Londres xxx 20067 Susan Dow Gerente 40 xxx Londres xxx 4 Optimizador Procesamiento de consultas Consulta Analizador y traductor Expresión del álgebra relacional Plan de Ejecución Ejecución Resultado de la Consulta Datos Codificación 5 Procesamiento de consultas Consulta Analizador y traductor Expresión del álgebra relacional SELECT * FROM Empleado INNER JOIN Sucursal on Empleado.Cod_Sucursal = Sucursal.Cod_Sucursal WHERE Empleado.Puesto = ‘gerente’ AND Sucursal.Ciudad = ‘Londres’ σ(puesto=‘gerente’)λ(ciudad=‘Londres’) Empleado ⋈ Sucursal.Nro_Sucursal=Empleado.Nro_Sucursal Sucursal Empleado Sucursal Análisis sintaxis en instrucciones. 2. Traducción al algebra relacional extendido (árbol invertido) 3. Valida nombres objetos en catalogo y operaciones válidas. 4. Análisis semántico (ej: predicados contradictorios: Sucursal.Ciudad = ‘Londres’ AND Sucursal.Ciudad <> ‘Londres’) 5. Resolver vistas y simplificación 6 Optimizador Optimizador Expresiones equivalentes 2. Primitivas de cada operación 3. Materialización o encauzamiento Expresión del álgebra relacional Plan de Ejecución Estadísticas E/S disco CPU Conectividad 1. σ(puesto=‘gerente’)λ(ciudad=‘Londres’)λ(Sucursal.Nro_Sucursal=Empleado.Nro_Sucursal) (Sucursal x Empleado) 2. σ(puesto=‘gerente’)λ(ciudad=‘Londres’) (Empleado ⋈ Sucursal.Nro_Sucursal=Empleado.Nro_Sucursal Sucursal) 3. (σpuesto=‘gerente’ Empleado) ⋈ Sucursal.Nro_Sucursal=Empleado.Nro_Sucursal (σciudad=‘Londres’ Sucursal) Plan de Ejecución Plan de Ejecución Plan de Ejecución Plan de Ejecución Planes posibles Operación 1 Tabla Tabla Tabla Operación 2 (σpuesto=‘gerente’ Empleado) Búsqueda lineal Búsqueda binaria Con índice cluster Algoritmo < Costo 7 El Optimizador SELECT REV.Codigo_Guia FROM reserva_visita REV INNER JOIN reserva_visita_grado RVG ON REV.Codigo_Reserva = RVG.Codigo_Reserva WHERE RVG.GRADO=3 GROUP BY REV.Codigo_Guia SELECT REV.Codigo_Guia FROM reserva_visita REV WHERE REV.Codigo_Reserva IN( SELECT RVG.Codigo_Reserva FROM reserva_visita_grado RVG WHERE RVG.GRADO=3) GROUP BY REV.Codigo_Guia SELECT REV.Codigo_Guia FROM reserva_visita REV, reserva_visita_grado RVG WHERE RVG.GRADO=3 AND REV.Codigo_Reserva = RVG.Codigo_Reserva GROUP BY REV.Codigo_Guia Consulta 1 Consulta 2 Consulta 3 Condición de Unión de las Tablas Optimizador = Plan de ejecución Estadísticas Tiempos de optimización versus ejecución Niveles de Optimización (solo algunos motores). 8 El Optimizador y las estadísticas Optimizador Estadísticas Tablas: Número de filas, factor de bloqueo, bytes por fila, , numero de páginas. . Índices: Número de filas, cantidad de niveles, factor de bloqueo, numero de paginas. Actualización Atributos: histogramas (muestreo o full) Manual Automática Puesto filas Director 6 Gerente 50 Jefes 200 Analistas de riesgo 100 Cajeros 500 … … Tabla Empleado Promedio para el atributo puesto = 100 1000 empleados (filas) 10 Puestos distintos 9 Crear tabla: CREATE TABLE Person.Contact( FirstName nvarchar(60), LastName nvarchar(60), Phone nvarchar(15), Title nvarchar(15) ) Cargar la tabla con filas. INSERT INTO Person.Contact VALUES(N'James',N'Smith',N'425-555-1234',N'Mr') INSERT INTO Person.Contact VALUES(N'James',N'Andersen',N'425-555-1111',N'Mr') INSERT INTO Person.Contact VALUES(N'James',N'Andersen',N'425-555-3333',N'Mr') INSERT INTO Person.Contact VALUES(N'Christine',N'Williams',N'425-555-0000',N'Dr') INSERT INTO Person.Contact VALUES(N'Susan',N'Zhang',N'425-555-2222',N'Ms') DBCC SHOW_STATISTICS (N'Person.Contact', LastName) statistics_name statistics_keys _WA_Sys_00000002_1B29035F LastName Name Updated Rows Rows Sampled Density Average key length String Index _WA_Sys_00000002_1B29035F Mar 25 2015 11:21AM 5 5 0 13.6 YES ll Density Average Length Columns 0.25 13.6 LastName RANGE_HI_KEY RANGE_ROWS EQ_ROWS DISTINCT_RANGE_ROWS Andersen 0 2 0 Smith 0 1 0 Williams 0 1 0 Zhang 0 1 0 Ejemplo de estadísticas RANGE_HI_KEY A key value showing the upper boundary of a histogram step. RANGE_ROWS Specifies how many rows are inside the range (they are smaller than this RANGE_HI_KEY, but bigger than the previous smaller RANGE_HI_KEY). EQ_ROWS Specifies how many rows are exactly equal to RANGE_HI_KEY. DISTINCT_RANGE_ROWS Specifies how many distinct key values are inside this range (not including the previous key before RANGE_HI_KEY and RANGE_HI_KEY itself); 10 1. Lectura de Tablas: 1000 + 50 accesos a disco Se crea una table de 1000 * 50 tuplas Lectura de las 1000 * 50 filas para comprobar si cumplen con el predicado de la seleccion (1000 + 50) + 2 * (1000 * 50) = 101050 accesos a disco Evaluación de expresiones equivalentes Optimizador Estadísticas SELECT * FROM Empleado INNER JOIN Sucursal on Empleado.Cod_Sucursal = Sucursal.Cod_Sucursal WHERE Empleado.Puesto = ‘gerente’ AND Sucursal.Ciudad = ‘Londres’ Sucursal (50 filas) 5 sucursales en Londres Empleado (1000 filas) 50 empleados gerentes 1. σ(puesto=‘gerente’)λ(ciudad=‘Londres’)λ(Sucursal.Nro_Sucursal=Empleado.Nro_Sucursal) (Sucursal x Empleado) Histogramas 2. Lectura de tablas: 1000 + 50 accesos a disco Combinacion de las tablas: 1000 filas (un empleado solo puede trabajar en una sucursal) Lectura de las 1000 filas para comprobar si cumplen con el predicado de la seleccion (1000 + 50) + 2 * (1000) = 3050 accesos a disco 2. σ(puesto=‘gerente’)λ(ciudad=‘Londres’) (Empleado ⋈ Sucursal.Nro_Sucursal=Empleado.Nro_Sucursal Sucursal) 3. Lectura de los 1000 Empleados para determinar si se trata de un gerente: 1000 accesos a disco Produce una table de 50 filas (un empleado solo puede trabajar en una sucursal) Lectura de las 50 Sucursales para determinar si se trata de Londres: 50 accesos a disco Produce una tabla de 5 filas Combinacion de las tablas: 50 + 5 accesos a disco 1000 + 2 * 50 + 5 + (50 + 5) = 1160 accesos a disco 3. (σpuesto=‘gerente’ Empleado) ⋈ Sucursal.Nro_Sucursal=Empleado.Nro_Sucursal (σciudad=‘Londres’ Sucursal) 11 Primitivas: Selección legajo nombre Apellido Cargo Cod_suc barrio ciudad 10001 Jorge Matow Gerente 10 xxx Londres xxx 000235 Mariana Suarez Cajero 6 xxx Bs As xxx 10089 Roger Karpentie Cajero 8 xxx Miami xxx 4557 Roberto Noriega Analista de Riesgo 3 Xxx New Yorrk xxx 20067 Susan Dow Gerente 40 Xxx Miami xxx 45990 Pedro Garcia Cajero 5 Xxx Bogotá xx 3000 Virginia Larson Analista de riesgo 10 Xxx Londres Xxx 9908 Christine Roberts Cajero 3 Xxx New Yorrk xx 05443 Peter Watson Gerente 16 Xxxx Londres Xxx 10076 David Larson Gerente 18 xxx Londres XxxPara clave primaria = Para <> clave primaria = b/2 Búsqueda lineal b factor de bloqueo = 20 (Bloques de 8 kb y filas de 400 bytes) filas = 1.000-> 1000/20 = total de bloques 50 (b) Para clave primaria = Para <> clave primaria = Búsqueda binaria Fb Log2 b + n Log2 b Q filas cumplen seleccion N + n Fb Para clave primaria = Para <> clave primaria = N Índice primario Niveles del indice Ej atributo = PK: Legajo = 3000 Ej atributo <> PK: Puesto = ´Gerente´ N + n Para clave primaria = Para <> clave primaria = N + 1 Índice secundario Tabla EMPLEADO (1.000 filas) 12 Reunión: Bucle Anidado legajo nombre Apellido Cargo Cod_suc 10001 Jorge Matow Gerente 10 000235 Mariana Suarez Cajero 6 10089 Roger Karpentie Cajero 8 4557 Roberto Noriega Analista de Riesgo 3 20067 Susan Dow Gerente 40 45990 Pedro Garcia Cajero 5 3000 Virginia Larson Analista de riesgo 10 9908 Christine Roberts Cajero 3 05443 Peter Watson Gerente 16 10076 David Larson Gerente 18 Cod_suc Nombre sucursal Domicilio m2 Pais 1 Miami-Center 2 Houston 3 Bs As-Centro 4 Bs.As-Almagro 5 Bogota 6 New York-Center 7 New York- China town … 80 Pekin 1000 filas - b: 50 Tabla EMPLEADO Tabla SUCURSAL 80 filas - Fb. 40 (filas de 200 bytes) - b: 2 Bucle Anidado Cuando atributo de busqueda PK De TI -> frenar la busqueda cuando la encuentra nE * bI + bE Bucle Anidado por Bloque bE * bI + bE nfTE=1 nfTI=1 Hacer mientras nfTE<=filasTE ir a fila nfTE Hacer mientras nfTI<=filasTI ir a fila nfTI Si cod_sucTE=cod_sucTI agregar en Tabla reunion Fin si nfTI=nfTI+1 Fin nfTE=nfTE+1 Fin Bucle anidado Indexado bE + nE * c Costo selección ej N 13 Nested Loop Join In nested loop joins, the decision of which is the outer table and which is the inner table is very importаnt becаuse the outer table is scanned only once, and the inner table is аccessed once for every quаlifying row in the outer table. The optimizer decide which table will plаy which role in the join. Some of the fаctors tаken into аccount by the optimizer when mаking this decision include: Tаble size Buffer pool size Predicаtes Ordering requirements Presence of indexes Reunión por Mezcla legajo nombre Apellido Cargo Cod_suc 4557 Roberto Noriega Analista de Riesgo 3 9908 Christine Roberts Cajero 3 45990 Pedro Garcia Cajero 5 235 Mariana Suarez Cajero 6 10089 Roger Karpentie Cajero 8 10001 Jorge Matow Gerente 10 3000 Virginia Larson Analista de riesgo 10 5443 Peter Watson Gerente 16 10076 David Larson Gerente 18 20067 Susan Dow Gerente 40 Cod_suc Nombre sucursal Domicilio m2 Pais 1 Miami-Center 2 Houston 3 Bs As-Centro 4 Bs.As-Almagro 5 Bogota 6 New York-Center 7 New York- China town … 80 Pekin Tabla empleado (ORDENADA POR COD_SUC) Tabla sucursaL (ORDENADA POR COD_SUC) Reunión por Mezcla bE + bI 3 (bE + bI) Reunión por Asociacion 14 Becаuse the tables are generаlly scanned only once, the decision on which is the outer and which is the inner table is somewhаt less importаnt thаn with а nested loop join; however, becаuse of the possibility of duplicаte vаlues, the optimizer will аttempt to choose the table with fewer duplicаte vаlues аs the outer table. Optimizador Procesamiento de consultas Consulta Analizador y traductor Expresión del álgebra relacional Plan de Ejecución Ejecución Resultado de la Consulta Datos Consultas y resultados en Memoria – Bind de Variables 15 Ajustes del Rendimiento Desarrolladores de aplicaciones Hardware Ajustes en el DBMS Hardware Base de datos almacenada Diccionario de datos (Meta-datos) SGBD (DBMS) Software a Software b Software n … DDL DML Servicios que permiten gestionar: Transacciones, concurrencia, accesos, restricciones, archivos, memoria intermadia, optimizar consultas, etc. Sistema Operativo Usuarios Diseño lógico o físico del Esquema DBA Escritura de transacciones 16 Ajustes del Hardware Procesador Memoria principal Tipo, cantidad y asignaciones Discos: Tipos de discos Configuración RAID Arquitecturas 17 Se pueden agregar vistas de monitoreo del hardware de la base de datos. Disco, procesadores, memoria. Ajustes del DBA con el DBMS Reorganización de archivos de paginas de datos Regeneración de índices. Actualización de estadísticas Tamaño de memoria intermedia: asignaciones de cache para datos, para procedimientos almacenados, etc. Tamaño de bloques y de extensiones Asignación a discos de los archivos (datos, temporales, logs) Tareas periódicas: 18 Diseño Codigo Nombre Apellido CUIT Descomponer tablas mediante relaciones 1 a 1. Codigo Nacimiento Lugar nacimiento Lugar de entrega …. 4 atributos de uso frecuente 25 atributos de uso poco frecuente Elección de tipos de datos Smallint (2 bytes) vs bigint (8 bytes) vs Numeric (hasta 17 bytes) Varchar vs Char Vs nVarchar o nChar Aplicar redundancia. Codigo cliente Id mov importe 1005 1 $100.000 1005 2 $-20.000 1005 3 $-15.000 … … $35.000 Codigo Saldo cliente 1005 $53.000 19 Poner ejemplos de cada uno: tabla uno a uno. diferencia entre una tabla con uno u otro tipo de datos en la cantidad de MB de la misma, Saldo del cliente Partición tabla VENTAS por año de venta. Diseño Indices cluster e índices segundarios. Elección de atributos a indizar. actualización vs consultas Uso de vistas materializadas. Datos calculados. Manejo de Particiones. Índices Tabla de Ventas Particionada por el año de la venta >=2021 =2020 > 2015 AND < 2019 = 2019 <= 2015 20 Poner ejemplos de cada uno: tabla uno a uno. diferencia entre una tabla con uno u otro tipo de datos en la cantidad de MB de la misma, Saldo del cliente Partición tabla VENTAS por año de venta. Desarrollo de transacciones Escritura de las consultas Traer la menor cantidad de datos posible (Evitar el *, solo los datos que se usan, etc.) 2. Tratar de evitar las iteraciones: Consultas anidadas complejas: reemplazar por Inner Join. 3. Uso de stored procedures. 4. Uso de cursores limitado. 5. Trabajo con abstracción de datos desde la aplicación 6. Usar hints en casos muy específicos (orden del join, uso de indices, etc.) SELECT column_list FROM table_name WITH (INDEX (index_name) [, ...]) SELECT memberID, fname, lname FROM members WITH (INDEX(memberID_index)) Ayudar a que el optimizador use su potencial 21 Ejemplos de uso Herramientas de Optimización Trace: monitorear sentencias más costosas o más habituales y datos de las mismas. Puede automatizar recomendaciones (índices, etc.) TextData: Texto plano. Por ejemplo la SQL ejecutada. Duration: Duración en mili segundos para SPID: Identificador para la sesión de base de datos que provoca el evento. DatabaseName: Base de datos sobre la que ocurre el evento. TimeStart: La fecha/hora para ubicar el evento. Ej: SQL Server Profiler (MSSQLSever) Estrategias Proactiva: Para asegurar performance de opciones criticas Reactiva: Cuando hay problemas con tiempo de respuesta. 22 Resumiendo 1. Procesamiento de consultas 2. El optimizador del DBMS 6. Los Ajustes del Rendimiento 4. Expresiones equivalentes 5. Operaciones Primitivas 3. Plan de ejecución 7. Recursos de hardware 8. DBMS y el esquema 9. Las transacciones A. ¿Cómo funciona el procesamiento de una consulta en un DBMS? B. ¿Cómo mejorar el desempeño de las consultas? 23 Plan de Ejecución SELECT ESC.Nombre_Escuela, ESC.Domicilio_Escuela, TEL.Telefono_Escuela FROM escuela ESC INNER JOIN telefono_escuela TEL ON ESC.Codigo_Escuela = TEL.Codigo_Escuela Estructura de árbol (se lee de derecha a izquierda) SQL Server 24 Este plan debiera ponerlo adelante. Quizas uno un poco mas complejo. Tratar de que entiendan algo, y luego empezar la clase. Luego volver a ponerlo aquí. Plan de Ejecución - SQL SERVER 25 Plande Ejecución - ORACLE: SQL Monitoring 26 Plan de Ejecución - DB2 (Visual Explain) 27 image2.png image4.png image7.png image1.jpeg image3.png image5.png image6.png image8.png image4.jpeg image5.jpeg image6.jpeg image9.png image10.png image11.png image12.png image13.png image14.png image20.png image15.png image23.png image16.png image17.png image18.png image19.png
Compartir