Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing....

32
Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de performance Ing. Alfonso Vicente, PMP [email protected]

Transcript of Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing....

Page 1: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Maestría en Bioinformática

Bases de Datos y Sistemas de Información

Nociones de performance

Ing. Alfonso Vicente, [email protected]

Page 2: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Agenda

Noción de performance Acceso secuencial Otras formas de acceso

ConceptosÍndices

OptimizadorPlanes de acceso

Page 3: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Agenda

Estructura Acceso por índices Índices implícitos Sentencia CREATE INDEX Mejores prácticas

ConceptosÍndices

OptimizadorPlanes de acceso

Page 4: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Agenda

Función del optimizador Estadísticas Hints

ConceptosÍndices

OptimizadorPlanes de acceso

Page 5: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Agenda

Etapas en la ejecución de SQL Reuso del plan de acceso SQL dinámico y SQL estático Revisión del plan de acceso

ConceptosÍndices

OptimizadorPlanes de acceso

Page 6: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Agenda

Noción de performance Acceso secuencial Otras formas de acceso

ConceptosÍndices

OptimizadorPlanes de acceso

Page 7: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Conceptos

Noción de performance

• Normalmente la performance se asocia a la idea de rapidez para realizar un trabajo

• Es un concepto general que puede tener varias métricas

• Tiempo de respuesta: tiempo medido desde el punto de vista del usuario desde que envía una solicitud hasta que obtiene una respuesta

• Throughput: cantidad de trabajo por unidad de tiempo. Según el contexto el “trabajo” se puede medir en bytes, número de operaciones de E/S, operaciones lógicas, etc

Page 8: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Conceptos

Noción de performance

• La principal causa de una performance pobre es un diseño pobre (normalización, SQL, algoritmos)

• Ejemplo: el programa que se enlentecía por las tardes

• Un programa debía generar números secuenciales dentro de cada día

• El algoritmo consistía en probar el 1, si ya había sido dado probar el 2, si ya había sido dado probar el 3, y así sucesivamente...

Page 9: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Conceptos

Acceso secuencial

• Imagine el siguiente algoritmo interno para resolver una consulta en: personas(id, nombre, apellido, telefono)

select telefono from personas where nombre = 'Juan' and apellido = 'López'

t := la primer tupla de personasmientras (t sea una tupla)

si (t.nombre= 'Juan' y t.apellido = 'López') retorno t.telefonot := siguiente tupla de personas

retorno {}

• ¿Qué puede decir sobre esta forma de acceso?

Page 10: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Conceptos

Otras formas de acceso

¿Con qué velocidad buscamos en la guía telefónica?

• Paso 0: Tenemos N páginas, abrimos al medio• Paso 1: Buscamos en N/2 páginas, abrimos al medio• Paso 2: Buscamos en N/4 páginas, abrimos al medio

• Paso k: Buscamos en N/2^k páginas, llegamos a la página!

Cuando llegamos: N/2^k = 1 N = 2^k k = log2 N

El número de pasos crece con las páginas, pero de forma logarítmica (mil páginas = 10 pasos, 1 millón: 20 pasos)

Page 11: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Agenda

Estructura Acceso por índices Índices implícitos Sentencia CREATE INDEX Mejores prácticas

ConceptosÍndices

OptimizadorPlanes de acceso

Page 12: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Índices

Estructura

• Las tablas mantienen una columna oculta con un “identificador de tupla” (llamémosle ROWID)

PERSONAS+----------+----------+----------+----------+----------+| ROWID | ID | NOMBRE | APELLIDO | TELEFONO |+----------+----------+----------+----------+----------+| 10 | 1 | Juan | Martínez | 5551122 |+----------+----------+----------+----------+----------+| 11 | 2 | Rodrigo | Giménez | 5553344 |+----------+----------+----------+----------+----------+| 27 | 3 | María | Pérez | 5556677 |+----------+----------+----------+----------+----------+| 80 | 4 | Juan | López | 5558899 |+----------+----------+----------+----------+----------+

Page 13: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Índices

Estructura

• Los índices (generalmente) son estructuras arborescentes, ordenadas por algunas columnas, y con los ROWID

+---+----------+----+---+ | | Martínez | 10 | | +---+----------+----+---+

+---+----------+----+---+ +---+----------+----+---+| | Giménez | 11 | | | | Pérez | 27 | |+---+----------+----+---+ +---+----------+----+---+

+---+----------+----+---+ | | López | 10 | | +---+----------+----+---+

Page 14: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Índices

Estructura

• Normalmente no son árboles binarios, sino árboles B

• Estas estructuras deben actualizarse a medida que se modifica la instancia mediante sentencias DML

Page 15: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Índices

Acceso por índices

• Si buscamos por apellido y tenemos un índice por la columna apellido, la búsqueda en el índice será mucho más rápida (orden logarítmico vs. orden lineal)

• Luego, utilizando el ROWID de las tuplas que matchean con nuestra búsqueda, llegamos a las tuplas en la tabla de forma directa

• Dependiendo de la consulta, podría ni siquiera ser necesario llegar a la tabla:

select count(*) from personas where apellido = 'López';

Page 16: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Índices

Índices implícitos

• Al definir una PK o una UK, los RDBMSs crean índices de forma implícita (si ya no existe uno por esas columnas)

• Esto es porque el RDBMS debe asegurar que cada tupla tiene valores diferentes por cada clave, o sea que en cada INSERT y UPDATE debe buscar si el nuevo valor existe (y debe hacerlo rápido)

• El índice es otro objeto de esquema dentro de la base. Los que son creados implícitamente tendrán un nombre sin semántica (e.g. SYS000142)

Page 17: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Índices

Sentencia CREATE INDEX

• Podemos querer crear un índice por columnas que no sean PK ni UK (por ejemplo, para mejorar la performance de consultas por nombre y apellido)

create [unique] index <nombre>on <table> ( <col1> [asc|desc], ..., <colN> [asc|desc] );

• Ejemplo

create index personas_ape_nomon personas (apellido, nombre);

• En general, cada RDBMS tiene muchas más opciones

Page 18: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Índices

Sentencia CREATE INDEX

• También podemos querer crear un índice por columnas que sean PK o UK, para asignarles un nombre y evitar que se creen de forma implícita

create table PERSONAS ( ... );

create unique index IX_PERSONAS_IDon personas (id);

alter table personasadd constraint PK_PERSONASprimary key (id);

• No se creará un índice implícito porque ya existe uno

Page 19: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Índices

Mejores prácticas

• No siempre es mejor acceder por índice que acceder secuencialmente a la tabla

• Los índices pueden mejorar la performance de las sentencias que tienen predicado (SELECT, UPDATE, DELETE), pero necesitan ser mantenidos en cada sentencia DML (INSERT, UPDATE, DELETE)

• Necesitamos tener alguna idea de cuándo conviene crear índices, y qué índices crear

Page 20: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Índices

Mejores prácticas

• Si consultaremos frecuentemente una tabla “grande” por columnas que no están al comienzo de ningún índice, podemos considerar crear un índice por esas columnas

• Las columnas más selectivas deberían ubicarse primero

• Ejemplo: ¿qué índice convendría crear?

select nombre, apellido, telefono from personas where departamento = 5 and apellido = 'López';

select count(distinct departamento) from personas; 10select count(distinct apellido) from personas; 1000

Page 21: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Agenda

Función del optimizador Estadísticas Hints

ConceptosÍndices

OptimizadorPlanes de acceso

Page 22: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Optimizador

Función del optimizador

• El optimizador es quién decide, para cada sentencia, cómo accede a los datos (tablas e índices disponibles), tratando de elegir “el mejor algoritmo de acceso”

• A medida que la instancia (y esquema) cambia, el mejor algoritmo de acceso también cambia

• El optimizador es parte del RDBMS y funciona sólo, sin que debamos hacer nada

• ¿Cómo hace el optimizador para conocer sobre la instancia?

Page 23: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Optimizador

Estadísticas

• El optimizador se basa en estadísticas que toma “de vez en cuando” y mediante las cuales sabe sobre la distribución de los datos en las tablas y en las columnas

• Las estadísticas mantienen datos como el número de tuplas de cada tabla, y de cada columna datos como el menor y el mayor valor, el número de valores distintos, los límites de quintiles, el número de nulls, etc

• Según el RDBMS, el proceso que recolecta estadísticas podría correr de forma automática (por tiempo o según los cambios) o podríamos tener que correrlo explícitamente

Page 24: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Optimizador

Hints

• Algunos RDBMSs permiten agregar hints (sugerencias) a las sentencias, para sugerirle al optimizador un algoritmo de acceso

• Esto puede ser útil debido a que el optimizador no siempre elige el mejor plan de acceso posible

• El optimizador podría decidir mal debido a:• Estadísticas desactualizadas• Estadísticas con poco nivel de detalle (o sampling)• Un error de cálculo :)

Page 25: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Agenda

Etapas en la ejecución de SQL Reuso del plan de acceso SQL dinámico y SQL estático Revisión del plan de acceso

ConceptosÍndices

OptimizadorPlanes de acceso

Page 26: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Planes de acceso

Etapas en la ejecución de SQL

• Preparar: Implica tomar el texto del SQL y generar un “plan de acceso” y “variables de bind”

• Ejecutar: Implica seguir el plan de acceso (utilizando las variables de bind) para lograr el objetivo de la sentencia

• Imagine que en una base se ejecuta 10.000 veces al día la “misma consulta” con valores diferentes:

select nombre, apellido, telefono from personas where departamento = ? and apellido = ?

Page 27: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Planes de acceso

Reuso del plan de acceso

• El plan de acceso podría reutilizarse

• Preparar la sentencia una única vez (tal vez en tiempo de compilación) y generar el plan de acceso

• Ejecutarla N veces, con el plan ya obtenido

• Esto tiene ventajas (no se incurre en el costo de la preparación) y desventajas (si la instancia cambia, el optimizador no puede ayudarnos porque ya no interviene)

Page 28: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Planes de acceso

SQL dinámico y SQL estático

• Podemos beneficiarnos del uso de SQL estático utilizando código compilado, por ejemplo stored procedures o PreparedStatements en Java

Page 29: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Planes de acceso

Revisión del plan de acceso

• Revisar el plan de acceso de una sentencia es la mejor manera de asegurarse que se está utilizando el mejor plan de acceso posible

• La forma de hacerlo es diferente en cada RDBMS, aunque normalmente siempre hay alguna interfaz que lo muestra en forma gráfica

• En el plan de acceso, se debería mirar:• El costo (el global, y los pasos más costosos)• La existencia de TABLE SCANS

Page 30: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Planes de acceso

Revisión del plan de acceso

• En Oracle, mediante SQL *Plus:

SQL> explain plan for select sueldo from empleados where nombre = 'Luis' and apellido = 'Rodriguez';

Explained.

SQL> select * from table(dbms_xplan.display);

----------------------------------------------------------------------| Id | Operation |Name |Rows|Bytes|Cost (%CPU)|Time |----------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1| 31| 3 (0)|00:00:01 ||* 1 | TABLE ACCESS FULL|EMPLEADOS| 1| 31| 3 (0)|00:00:01 |----------------------------------------------------------------------

1 - filter("NOMBRE"='Luis' AND "APELLIDO"='Rodriguez')

Page 31: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Planes de acceso

Revisión del plan de acceso

• En Oracle, mediante SQL Developer

Page 32: Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Planes de acceso

Revisión del plan de acceso

• Después de crear un índice, el plan cambia. Primero accede al índice EMPS_NOM_APE y después a la tabla, con el ROWID (directamente a la tupla que se necesita)

SQL> create index emps_nom_ape on empleados(nombre, apellido);

Index created.

Plan de acceso:

--------------------------------------------------------------------------------|Id|Operation |Name |Rows|Bytes|Cost (%CPU)|Time |--------------------------------------------------------------------------------| 0|SELECT STATEMENT | | 1| 31| 1 (0) | 00:00:01 || 1| TABLE ACCESS BY INDEX ROWID|EMPLEADOS | 1| 31| 1 (0) | 00:00:01 ||*2| INDEX RANGE SCAN |EMPS_NOM_APE| 1| | 1 (0) | 00:00:01 |--------------------------------------------------------------------------------