Procesamiento de Consultas. Carlos A. Olarte (carlosolarte@puj.edu.co) BDII



Documentos relacionados
TEMA 4.6: Procesamiento y optimización de consultas

OPTIMIZADOR ORACLE. 1. La meta: escoger el modo más eficiente de ejecutar una declaración S.Q.L. FILTER 2 NESTED LOOPS

Nociones de performance

Herramientas para la optimización

Sistemas de Datos. Rendimiento de la Base de datos. Procesamiento de consultas y administración del rendimiento

TEMA 3 PROFESOR: M.C. ALEJANDRO GUTIÉRREZ DÍAZ 2 3. PROCESAMIENTO DE CONSULTAS DISTRIBUIDAS

Curso: Base de Datos Distribuidas. Unidad 3: Optimización de las Estrategias de Acceso. M. en C. José Mario Martínez Castro

UNIDAD 3 ASPECTOS ASOCIADOS CON BASES DE DATOS. Diseno Físico de Bases de Datos Objetivo. 2.2 Visión General del Procesamiento de Consultas

SQL (DML) Carlos A. Olarte Gestión y Modelación de SQL Datos (DML)

Capítulo 12: Indexación y asociación

Base de datos relacional

Bases de Datos: Structured Query Language (SQL)

A.1. Definiciones de datos en SQL

MANUAL BÁSICO DEL LENGUAJE SQL

Procesamiento y Optimización de consultas Material Preliminar en preparación

2. Mediante la tabla pg_class, vamos a ver cómo afecta los comandos analyze y vacuum a las tablas.

Almacenamiento y Recuperación de la Información

select nombre from profesores where categoria='aso6';

OPTIMIZACIÓN DE CONSULTAS EN SQL. Análisis de Consultas y Transacciones Ajuste de Indices Ajuste de Consultas

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual

Operaciones en el Modelo Relacional. Relacional. Relacional. Índice. Lenguajes de Consulta

Bases de Datos 2. Teórico

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

Sistemas de Datos Curso: Ernesto Chinkes. SQL Básico Algebra Relacional

ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Programación de sitios web Act 11: Reconocimiento de la unidad 3

5- Uso de sentencias avanzadas

Procesamiento y Optimización de Consultas

Base de datos Lenguaje SQL

Sistemas de Operación II


Curso SQL Nivel Avanzado 1. Miguel Jurado García

Bases de Datos 3º Informática de Sistemas

Optimización de consultas Resumen del capítulo 14

Práctica 3. Consultas SQL

DML SQL II. Comparaciones con relaciones

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

DataBase Administration

Structured Query Language (SQL) Fundamentos de Bases de Datos InCo

Consultas con combinaciones

BASES DE DATOS - SQL. Javier Enciso

OPTIMIZACION DE CONSULTAS A BASES DE DATOS RELACIONALES

Sistemas de Datos Curso: Ernesto Chinkes. Subconsultas Stored Procedures - Triggers

4. Modelo Relacional: Manipulación de los datos.

Figura 4.1 Clasificación de los lenguajes de bases de datos

MÓDULO 1: ORGANIZACIÓN Y ESTRUCTURA DE LA INFORMACIÓN. Tema 3: Interrogación y explotación de datos. Leire Aldaz, Begoña Eguía y Leire Urcola

SQL Los fundamentos del lenguaje

Tablas internas 1-12

Bases de Datos. Sistemas de Gestión de Bases de Datos

1. DML. Las subconsultas

BASES DE DATOS TEMA 1

Lenguaje de Consulta Estructurado S Q. Lenguaje de Consulta Estructurado. Wael Najjar /

DESARROLLO DE APLICACIONES

Árbol binario. Elaborado por Ricardo Cárdenas cruz Jeremías Martínez Guadarrama Que es un árbol Introducción

Tema 4. SQL. Juan Ignacio Rodríguez de León

Estructura de una BD Oracle. datafiles redo log controlfiles tablespace objetos Estructura lógica. Tablespaces tablespace SYSTEM

Definición de XQuery.

Sub consultas avanzadas

BASES DE DATOS I CONSULTA DE DATOS

BASE DE DATOS RELACIONALES

- Bases de Datos - - Diseño Físico - Luis D. García

Base de Datos Oracle 10g: Introducción a SQL Código: D Duración: 5 días (40 horas)

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas.

CONTROL DE ASISTENCIA DE PERSONAL

Motores MySQL. José Manuel Gómez. Departamento de Lenguajes y Sistemas Informáticos

M. C. Gustavo Alfonso Gutiérrez Carreón

UNIDAD DIDACTICA 1: SISTEMAS GESTORES DE BASES DE DATOS

INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES

MySQL y Sesiones en PHP. Área de Ingeniería Telemática

De uno a uno : Ejemplo de una llave primaria a otra llave primaria De uno a muchos : Ejemplo de una llave primaria a una Regular o Foránea.

SQL PROCEDURAL Triggers y Stored Procedures. Ing. Gustavo A. Correa Reina UNCPBA 2008

Sistemas de Archivos Interfaz. Módulo 10. Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur

2. ESTUDIO DE INDICES

Informática I Notas del curso

Centro de Capacitación en Informática

Instalación de la Base de Datos Aranda

Si queremos modificar la contraseña de sys, una vez que accedamos al sistema como sys, escribiremos la sentencia:

UNIDAD 1.- PARTE 1 MANIPULACIÓN AVANZADA DE DATOS CON SQL. BASES DE DATOS PARA APLICACIONES. Xochitl Clemente Parra Armando Méndez Morales

Estándar de desarrollo de aplicaciones del Govern de les Illes Balears

Entendiendo y Optimizando MySQL

Archivos. Teoría de Sistemas Operativos. Archivos. Archivos. Archivos. Archivos. Administración de Archivos

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

Un nombre de usuario de 30 caracteres o menos, sin caracteres especiales y que inicie con una letra.

Sistema de Recuperación. Carlos A. Olarte BDII

Restricciones de Integridad

LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F)

Bases de Datos I. Cursada Clase 4: Álgebra relacional y de bolsas Información ausente Claves BASES DE DATOS I

Universidad Católica Boliviana San Pablo Centro de Sistemas de Información

PRACTICA DE ADMINISTRACION DE BASES DE DATOS

Administración Básica de Oracle10g

Procedimientos para agrupar y resumir datos

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

Sistemas Operativos. Curso 2016 Procesos

Temario. Índices simples Árboles B Hashing

Contenido. Sistema de archivos. Operaciones sobre archivos. Métodos de acceso a archivos. Directorio. Sistema de archivos por capas.

Integridad y Seguridad en los sistemas de Bases de Datos. Javier Escobar Luis Ramirez Omar Asprino

LABORATORIO 10. ADMINISTRACIÓN DE COPIAS DE SEGURIDAD EN SQL SERVER

Introducción a Evaluación y Optimización de Consultas

SQL (Structured Query Language)

Unidad. Lenguaje SQL. (Structured Query Language)

Restricciones (constraints) FOREIGN KEY

Transcripción:

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

Contenido 1 Introducción 2 Indexación 3 Costo de las Operaciones 4 Evaluación de Expresiones 5 Transformación de Expresiones 6 Un ejemplo con Oracle

Pasos para la ejecución de una consulta Traducción: Generar a partir de la sentencia SQL, las instrucciones en el formato interno de la BD (álgebra relacional). Chequeo de la sintaxis, tipos de atributos, tablas,etc Optimización: Encontrar el plan de ejecución óptimo para llevar a cabo la consulta. Evaluación: Ejecutar la consulta de acuerdo al plan de ejecución. Selección de los algoritmos adecuados para llevar a cabo las operaciones

...continuación

Definiciones Primitivas de Evaluación: Operaciones del álgebra relacional junto con sus instrucciones de evaluación Plan de Ejecución: Secuencia de operaciones primitivas utilizadas para la evaluación de una consulta

Quién y cómo se optimizan las consultas El SGBD debe garantizar la optimización Se optimiza una consulta si se disminuye el número de accesos a disco Se pueden encontrar expresiones equivalentes del álgebra relacional que optimicen la consulta Escoger el algoritmo adecuado para implementar la primitiva de evaluación. Tipos de Optimizadores: Basados en el Costo: Se basar en información estadística de las relaciones involucradas en la consulta para estimar el costo de ejecución de un plan Basados en heurísticos: hacen usos de heurísticos para escoger el mejor plan de ejecución

Optimizadores basados en Costo Información Necesaria n r : Número de Tuplas de las relación r b r : Número de bloques utilizados por r t r : Tamaño en bytes de una tupla de r f r : Tuplas por bloque V (A, r): Select count(distinct A) from r AA i : Altura del índice E A : Costo estimado del algoritmo A Dicha información estadística es calculada por el SGBD en momentos de inactividad

Medidas de E A Lecturas de bloques en disco, ignorando latencia, tiempos diferentes de transferencia, etc. Para las B.D distribuidas y paralelas hay que tener en cuenta la cantidad de información transferida entre nodos El uso de la CPU no se tiene en cuenta

Índices Índices Lineales

Continuación Arboles B+

Consto de una selección (σ A = a) Si r no está ordenada por el atributo A el número de bloques extraídos es E A = b r /2 Si r está ordenada por el atributo A se puede utilizar una búsqueda binaria E A = log 2 b r Si existe un índice sobre el atributo A, se debe recorrer un camino de altura AA i y luego leer el bloque del dato.

Consto de una selección (σ A a ) Si no existen índices o un ordenamiento físico la búsqueda debe ser lineal Con un índice o un ordenamiento se puede encontrar el valor de a con una búsqueda binaria (o recorrido sobre el árbol) y luego realizar recorridos lineales a partir de dicha posición

Selecciones Conjuntivas (σ θ1 θ 2 ) Seleccionar por un índice la condición que traiga menos tuplas y probar las mismas en memoria principal si cumplen con el segundo predicado Utilizar un índice compuesto de los atributos involucrados en la selección (si existe) Seleccionar los punteros a registros de cada condición (en el índice) y luego realizar la intersección

Selecciones con Disyunciones (σ θ1 θ 2 ) Si existe un índice por cada condición, seleccionar los apuntadores y luego realizar la unión sobre los mismos Si una sola condición no tiene índice, la mejor solución no es mejor que hacer una búsqueda lineal sobre la relación

Costo del Ordenamiento Cuando se ordenan las relaciones? El usuario puede requerir una relación ordenada Una operación como la reunión puede resultar mas eficiente si se ordenan las relaciones a reunir Como Ordenar? Ordenación Lógica: Creando un índice sobre la relación. Los datos físicamente siguen en desorden y leer por el índice puede causar una lectura de bloque por cada tupla Ordenación Física: Ordenar el archivo como tal utilizando mecanismos como el quick sort o merge sort.

Costo de la Reunión Reunión en blucle anidado: Realizar un for anidado entre las dos relaciones. E A = n s n r Reunión en blucle anidado por bloques : Realizar un for anidado entre los bloques de las dos relaciones. E A = b s b r Reunión en blucle anidado indexada : Realizar un for sobre los bloques de r y la búsqueda sobre s utilizando un índice. E A = b r log 2 b r

... continuación Reunión por mezcla: Ordenar las dos relaciones (de ser necesario) y luego recorrerlas linealmente encontrando las tuplas que deban estar en la reunión: E A = O r + O s + b r + b s Reunión por asociación: Encontrar una función de partición H tal que divida las relaciones en fragmentos con tuplas con el mismo valor de función. Dicha función debe realizar una partición mas o menos homogénea sobre las relaciones

Costo de la eliminación de duplicados Ordenar la relación y leer secuencialmente.

Costo de las operaciones sobre conjuntos Ordenar (de ser necesario) cada una de las relaciones y luego recorrerlas secuencialmente encontrando las tuplas de la nueva relación

Agregación Realizar el ordenamiento e ir calculando la función de asociación (como la eliminación de duplicados)

Evaluación de Expresiones Las expresiones se pueden evaluar por medio de dos métodos: Materialización: En el cual los resultados parciales se escriben en una tabla temporal, implicando aumentar la escritura de los bloques a disco en el cálculo de eficiencia Encauzamiento: Los resultados generados van alimentando la operación siguiente. Se puede presentar el esquema bajo demanda en el cual las operaciones superiores hacen peticiones de tuplas a las inferiores y el esquema Desde los procedimientos, los operadores inferiores generan tuplas sin ser requeridas

Transformación de Expresiones A partir de las reglas de equivalencia sobre el álgebra relacional, es posible encontrar expresiones equivalentes a la expresión inicial y que tengan un menor costo. σ θ1 θ 2 (E) σ θ1 (σ θ2 (E)) σ θ1 θ 2 (E) σ θ2 θ 1 (E) π L1 (π L2 (...π Ln (E)..)) π L1 (E) σ θ (E 1 E 2 ) E 1 θ E 2 σ θ1 (E 1 θ2 E 2 ) E 1 θ1 θ 2 E 2 E 1 θ E 2 E 2 θ E 1 (E 1 θ1 E 2 ) θ2 E 3 E 1 θ1 (E 2 θ2 E 3 ) (Siempre y cuando θ 2 solo tenga atributos en común con E 2 y E 3 )

... Continuación σ θ0 (E 1 θ1 E 2 ) σ θ0 (E 1 ) θ1 E 2 (Siempre que θ 0 solo incluye atributos de E 1 σ θ1 θ 2 (E 1 θ3 E 2 ) σ θ1 (E 1 ) θ3 σ θ2 (E 2 ) (Siempre que θ 1 (resp. θ 2 ) tenga solo atributos de E1 (resp. E 2 ) π L1 L 2 (E 1 θ E 2 ) (π L1 E 1 ) θ (π L2 E 2 ) (Si L 1 (resp L 2 ) son atributos de E 1 (resp E 2 ) E 1 E 2 E 2 E 1 y E 1 E 2 E 2 E 1 (E 1 E 2 ) E 3 E 1 (E 2 E 3 ) y (E 1 E 2 ) E 3 E 1 (E 2 E 3 )

Proceso de Optimización basado en el Costo Generar Expresiones del álgebra relacional a partir de la expresión inicial (pueden llegar a ser del orden de n!) Elegir la expresión de menor costo (en la medida de lo posible) Seleccionar los algoritmos para llevar a cabo cada operación.

Optimización heurística Se apoyan en heurísticos tales como: Se deben realizar las selecciones lo mas pronto posible (Ej: seleccionar las tuplas primero y luego realizar la reunión) Las proyecciones se deben realizar al principio pues reducen el tamaño de las relaciones.

Algoritmo para un optimizador heurístico 1 Deshacer las selecciones conjuntivas en selecciones simples 2 Mover las operaciones de selección lo mas abajo posible del árbol de expresiones 3 Agrupar las reuniones con las selecciones de tal manera que se reduzcan el número de tuplas a reunir. 4 Sustituir los productos cartesianos por una reunión (combinándolos con selecciones) 5 Mover tan abajo del árbol como sea posible las proyecciones de relaciones 6 Identificar los subárboles cuyas operaciones se puedan encauzar.

Un ejemplo con Oralce SQL Trace Facility A Es una herramienta de Oracle que permite: Medir ocupación de CPU por consulta Medir accesos a disco Medir número de registros procesados Visualizar el plan de ejecución de la consulta

Continuación Explain FOR Utilidad que permite conocer el plan de ejecución de una consulta Prerequisitos: la tabla plan table plan table CREATE TABLE plan_table (statement_id VARCHAR2(30), timestamp DATE, remarks VARCHAR2(80), operation VARCHAR2(30), options VARCHAR2(30), object_node VARCHAR2(128), object_owner VARCHAR2(30), object_name VARCHAR2(30), object_instance NUMERIC, object_type VARCHAR2(30), optimizer VARCHAR2(255), search_columns NUMERIC,id NUMERIC, parent_id NUMERIC, position NUMERIC, cost NUMERIC, cardinality NUMERIC, bytes NUMERIC, other_tag VARCHAR2(255), other LONG);

Continuación... Posibles resultados para Explain FOR Nested Loop: Operaciones de Join Partition: Operaciones sobre una partición específica Projection: Proyección Remote: Extraer datos de una base de datos remota Sequence: Operación con una secuencia Sort: Puede ser Aggregate (agrupaciones), Unique (Eliminación de duplicados), Group By, Join (Ordenar antes de hacer merge), Order by. Table Access: Puede ser Full (lectura de toda la tabla), By Index (lectura dado un índice), By rowid (Lectura dado el número de registro)

Continuación TkProof Permite visualizar los resultados del archivo generado por el SQL trace Permite conocer el plan de ejecución de una consulta (explain plan for)

Pasos a Seguir 1 Modificar los siguientes parámetros de inicialización de la base de datos: (init ora) timed statistics = true user dump file=/ / /dir max dump file size=5m 2 Habilitar SQL Trace para la sesión de usuario: SQL ALTER SESION SET SQL TRACE=TRUE 3 Ejecutar la(s) consulta(s) 4 Ejecutar tkproof sobre el archivo generado: tkproof arch.trc arch.txt

Resultados de TkProof Parse: Fase de transformar la expresión en un plan Execute: Ejecución del plan Fetch: Solo para los select Count: Número de veces que se ejecutó CPU: Seg transcurridos en CPU Elapse: Seg que duró la consulta Disk: Bloques transferidos Rows: Filas afectadas

Ejemplos alter session set sql_trace=true; select codigo,nombre from padre; call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 25 0.00 0.00 0 25 2 350 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 27 0.00 0.00 0 25 2 350 Rows Row Source Operation ------- --------------------------------------------------- 350 TABLE ACCESS FULL PADRE

... continuación select codigo,nombre from padre where codigo = 5 Rows Row Source Operation ------- --------------------------------------------------- 1 TABLE ACCESS BY INDEX ROWID PADRE 1 INDEX UNIQUE SCAN (object id 17709) select codigo,nombre from padre where nombre = C Rows Row Source Operation ------- --------------------------------------------------- 0 TABLE ACCESS FULL PADRE create index padre_nom_idx on padre(nombre) select codigo,nombre from padre where nombre = A Rows Row Source Operation ------- --------------------------------------------------- 0 TABLE ACCESS BY INDEX ROWID PADRE 0 INDEX RANGE SCAN (object id 17719) drop index padre_nom_idx

... continuación select nombre from padre union select nombre from hijo Rows Row Source Operation ------- --------------------------------------------------- 2800 SORT UNIQUE 3150 UNION-ALL 350 TABLE ACCESS FULL PADRE 2800 TABLE ACCESS FULL HIJO ******************************************************************************** select h.codigo, h.nombre, p.nombre from padre p, hijo h where p.codigo = h.padre Rows Row Source Operation ------- --------------------------------------------------- 2800 NESTED LOOPS 2800 TABLE ACCESS FULL HIJO 2800 TABLE ACCESS BY INDEX ROWID PADRE 2800 INDEX UNIQUE SCAN (object id 17709) ******************************************************************************** select h.codigo, h.nombre, p.nombre from padre p, hijo h where p.nombre = h.nombre Rows Row Source Operation ------- --------------------------------------------------- 350 MERGE JOIN 2800 SORT JOIN 2800 TABLE ACCESS FULL HIJO 350 SORT JOIN 350 TABLE ACCESS FULL PADRE

... continuación select codigo,nombre from padre order by nombre Rows Row Source Operation ------- --------------------------------------------------- 350 SORT ORDER BY 350 TABLE ACCESS FULL PADRE ******************************************************************************** select codigo,nombre from padre order by codigo Rows Row Source Operation ------- --------------------------------------------------- 350 TABLE ACCESS BY INDEX ROWID PADRE 350 INDEX FULL SCAN (object id 17709) ******************************************************************************** select p.codigo,p.nombre,h.nombre from padre p, hijo h where p.codigo = h.padre and p.nombre = A Rows Row Source Operation ------- --------------------------------------------------- 0 NESTED LOOPS 2800 TABLE ACCESS FULL HIJO 0 TABLE ACCESS BY INDEX ROWID PADRE 2800 INDEX UNIQUE SCAN (object id 17709) ********************************************************************************

... continuación select p.codigo,p.nombre,h.nombre from padre p, hijo h where p.nombre = h.nombre and p.codigo = h.padre Rows Row Source Operation ------- --------------------------------------------------- 350 NESTED LOOPS 2800 TABLE ACCESS FULL HIJO 350 TABLE ACCESS BY INDEX ROWID PADRE 2800 INDEX UNIQUE SCAN (object id 17709) ******************************************************************************** select codigo,nombre from hijo where codigo <= 5 and nombre like %A% Rows Row Source Operation ------- --------------------------------------------------- 0 TABLE ACCESS BY INDEX ROWID HIJO 5 INDEX RANGE SCAN (object id 17711) ******************************************************************************** select codigo,nombre from hijo where codigo <= 5 or nombre like %A% Rows Row Source Operation ------- --------------------------------------------------- 5 TABLE ACCESS FULL HIJO ********************************************************************************

... continuación select nombre from hijo minus select nombre from padre Rows Row Source Operation ------- --------------------------------------------------- 2450 MINUS 2800 SORT UNIQUE 2800 TABLE ACCESS FULL HIJO 350 SORT UNIQUE 350 TABLE ACCESS FULL PADRE ******************************************************************************** select r.codigo,h.nombre,p.nombre from relacion r, padre p, hijo h where r.hijo = h.codigo and h.padre = p.codigo Rows Row Source Operation ------- --------------------------------------------------- 11200 NESTED LOOPS 11200 NESTED LOOPS 11200 TABLE ACCESS FULL RELACION 11200 TABLE ACCESS BY INDEX ROWID HIJO 11200 INDEX UNIQUE SCAN (object id 17711) 11200 TABLE ACCESS BY INDEX ROWID PADRE 11200 INDEX UNIQUE SCAN (object id 17709) ********************************************************************************

... continuación select r.codigo,h.nombre,p.nombre from relacion r, padre p, hijo h where r.hijo = h.codigo and h.padre = p.codigo and h.nombre like %A% Rows Row Source Operation ------- --------------------------------------------------- 0 NESTED LOOPS 0 NESTED LOOPS 11200 TABLE ACCESS FULL RELACION 0 TABLE ACCESS BY INDEX ROWID HIJO 11200 INDEX UNIQUE SCAN (object id 17711) 0 TABLE ACCESS BY INDEX ROWID PADRE 0 INDEX UNIQUE SCAN (object id 17709)