Nociones de performance



Documentos relacionados
Maestría en Bioinformática. Bases de Datos y Sistemas de Información. Diseño Lógico. Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.

Otros objetos de Base de Datos

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

Maestría en Bioinformática. Bases de Datos y Sistemas de Información. Del MER al MR. Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.

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

Sub consultas avanzadas

A.1. Definiciones de datos en SQL

CONSULTAS BASICAS EN SQL SERVER

Base de datos relacional

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.

COMANDOS DE SQL, OPERADORES, CLAUSULAS Y CONSULTAS SIMPLES DE SELECCIÓN

MANUAL BÁSICO DEL LENGUAJE SQL

Trabajos de Ampliación. Bases de datos NoSQL.

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

Arquitectura de sistema de alta disponibilidad

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

Objetos de la Base de Datos

TEMA 4.6: Procesamiento y optimización de consultas

Base de datos en Excel

Procesamiento de Consultas. Carlos A. Olarte BDII

Diseño de bases de datos Diapositiva 1

Consultas con combinaciones

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

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

El lenguaje de manipulación de datos (DML) es una parte fundamental de SQL.

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

CONSTRUCCIÓN DEL PROCESO PAGO DE FACTURAS. BizAgi Process Modeler

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología

Maestría en Bioinformática. Bases de Datos y Sistemas de Información SQL: DDL. Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

Tutorial: Primeros Pasos con Subversion

Bases de Datos Indexación y Hashing 1. Indexación. Jorge Pérez Rojas Universidad de Talca, II Semestre 2006

Operación Microsoft Access 97

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

Oficina Online. Manual del administrador

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

TPVFÁCIL. Caja Real. Definiciones.

Optimizar base de datos WordPress

Administración de la producción. Sesión 10: Gestor de Base de Datos (Access)

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

Base de datos Lenguaje SQL

Restricciones de Integridad

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

SQL (Structured Query Language)

Análisis de los datos

Base de Datos Práctica 1.

Creación paso a paso de Formularios con Google (Parte I) (AKA: no corrijo nunca más!)

Utilidades de la base de datos

select nombre from profesores where categoria='aso6';

1

1. DML. Las subconsultas

PHP Perfect SQL v1.0 (SQL perfectas en PHP)

Conceptos básicos Oracle 10g Introducción - Administración de Oracle - Orasite.com

Tablas. Estas serán las tablas que usaremos en la mayoría de ejemplos. Empleado

Procedimientos para agrupar y resumir datos

Teórico 9 Del MER al MR

CONSULTAS DE RESUMEN SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Manual de NetBeans y XAMPP

Práctica 3. Consultas SQL

BASES DE DATOS EN VISUAL BASIC ACCESS + SQL

m047a Curso Programando una Base de Datos SQL Server 2008, 36 h Creación B.D. y Constraints

Aplicaciones de Bases de Datos con Delphi

Bases de datos relacionales y el modelo entidad-relación

Repaso. Laboratorio Informix. Stored Procedures. Ejemplo. Creación de stored procedures. Sql en un Procedimiento

6- Combinación de tablas

Cómo usar Subversion. con Windows XP/2000/2003.

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

Registro (record): es la unidad básica de acceso y manipulación de la base de datos.

PRACTICA DE ADMINISTRACION DE BASES DE DATOS

ADT CONSULTING S.L. PROYECTO DE DIFUSIÓN DE BUENAS PRÁCTICAS

Aviso Legal El presente libro electrónico se distribuye bajo Attribution-NonCommercial- NoDerivs 3.0 Unported

Oracle 12c DISEÑO Y PROGRAMACIÓN

Tutoriales sobre Moodle. EOI de Murcia. 0. Instrucciones para el volcado de cursos entre profesores

GeneXus BPM Suite X. Última actualización: 01 de Setiembre de 2008


ADMIRAL MARKETS AS. Normas de Ejecución Óptima. medida en que ha actuado de acuerdo con las correspondientes instrucciones del cliente.

Sistema de Facturación de Ventas WhitePaper Enero de 2007

Ataques a Aplicaciones de Bases de Datos

BASE DE DATOS - CURSO 02/03 PRÁCTICA 2: SQL: Lenguaje de definición de datos (DDL)

Sincronización del Servidor.

Queremos asegurarnos de que tu sitio aparezca en los resultados de búsqueda.

Enterprise Resource Planning (ERP) SISTEMA DE PLANEACIÓN DE RECURSOS MASTER: ALFREDO CASTRO JIMENEZ

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS

Manejo de versiones 392

Mantenimiento Limpieza

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

Laboratorio Informix. Stored Procedures Triggers

USANDO SQL. EN BASE DE Ooo.

Instituto Profesional DuocUC Escuela de Ingeniería Control File

SIIGO Pyme. Templates. Cartilla I

LAS CONSULTAS ACCESS Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

proceso que consiste en aplicar una serie de reglas a las relaciones obtenidas tras el paso del modelo entidad-relación al modelo relacional.

Tablas internas 1-12

Oracle Básico PL/SQL

H E R R A M I E N T A S D E A N Á L I S I S D E D A T O S HERRAMIENTAS DE ANÁLISIS DE DATOS

INVENTARIO INTRODUCCIÓN RESUMEN DE PASOS

Visión General de GXportal. Última actualización: 2009

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

Bases de Datos 3º Informática de Sistemas

2. ESTUDIO DE INDICES

Transcripción:

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

Agenda Conceptos Índices Optimizador Planes de acceso Noción de performance Acceso secuencial Otras formas de acceso

Agenda Conceptos Índices Optimizador Planes de acceso Estructura Acceso por índices Índices implícitos Sentencia CREATE INDEX Mejores prácticas

Agenda Conceptos Índices Optimizador Planes de acceso Función del optimizador Estadísticas Hints

Agenda Conceptos Índices Optimizador Planes de acceso 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

Agenda Conceptos Índices Optimizador Planes de acceso Noción de performance Acceso secuencial Otras formas de acceso

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

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...

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 personas mientras (t sea una tupla) si (t.nombre= 'Juan' y t.apellido = 'López') retorno t.telefono t := siguiente tupla de personas retorno {} Qué puede decir sobre esta forma de acceso?

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 = log 2 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)

Agenda Conceptos Índices Optimizador Planes de acceso Estructura Acceso por índices Índices implícitos Sentencia CREATE INDEX Mejores prácticas

Í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 +----------+----------+----------+----------+----------+

Í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 +---+----------+----+---+

Índices Estructura Normalmente no son árboles binarios, sino árboles B Estas estructuras deben actualizarse a medida que se modifica la instancia mediante sentencias DML

Í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';

Í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)

Í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_nom on personas (apellido, nombre); En general, cada RDBMS tiene muchas más opciones

Í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_ID on personas (id); alter table personas add constraint PK_PERSONAS primary key (id); No se creará un índice implícito porque ya existe uno

Í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

Í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; 10 select count(distinct apellido) from personas; 1000

Agenda Conceptos Índices Optimizador Planes de acceso Función del optimizador Estadísticas Hints

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?

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

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 :)

Agenda Conceptos Índices Optimizador Planes de acceso 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

Etapas en la ejecución de SQL Planes de acceso 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 =?

Reuso del plan de acceso Planes 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)

SQL dinámico y SQL estático Planes de acceso Podemos beneficiarnos del uso de SQL estático utilizando código compilado, por ejemplo stored procedures o PreparedStatements en Java

Revisión del plan de acceso Planes 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

Revisión del plan de acceso Planes 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')

Revisión del plan de acceso Planes de acceso En Oracle, mediante SQL Developer

Revisión del plan de acceso Planes 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 --------------------------------------------------------------------------------