Tunning para MySql.

Slides:



Advertisements
Presentaciones similares
integridad referencial
Advertisements

Guido Rubin Escalabilidad.
III - Gestión de memoria
LA BIBLIA DE MSQL PAG. EXPLAIN; Instructor; que se utiliza para examinar un registro de una tabla. El índice se examina dos veces sobre ambas tablas,
Rocío Contreras Águila Primer Semestre 2010
Rocio Contreras Aguila Primer Semestre Para poder ejecutar esto SQL Server nos permite definir datos y nos entrega herramientas para poder exigir.
Rocío Contreras Águila Primer Semestre 2010
Introducción a LAS Bases de Datos
Administración de transacciones y bloqueos
Supervisión del rendimiento de SQL Server
Administración de archivos de bases de datos
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:23 PRESENTACION: BASE DE DATOS ALUMNAS: Velazquez Corona Elsa Ponciano Antonio.
Virtual PC.
“Tuning” Universidad Nacional Autónoma de México Bases de datos I
U NIDAD 2 L ENGUAJE DE DEFINICIÓN DE DATOS (DDL) 1.
¿QUÉ SON LAS BASES DE DATOS?
Windows XP sp3.
Introducción a los Sistemas de Bases de Datos Distribuidos
TEMA: Arquitectura Escalable Ing. Enrique Meneses Falla
Johanna Lizeth Rodríguez Lorena Fda. Chávarro Ramos
4.3. Privilegios de usuarios
MySQL M.C. Pedro Bello López.
UNIDAD I Conceptos Básicos.
Bases de Datos Relacionales
Motores de almacenamiento en MySQL por Mario López y Juan A. Sánchez.
Subconsultas Avanzadas
Bases de datos en la Web n Las bases de datos permiten almacenar de una forma estructurada y eficiente toda la información de un sitio web n Ventajas –Proporcionar.
Una base de datos es un “almacén” que nos permite guardar grandes cantidades de información de forma organizada para que luego podamos encontrar y utilizar.
Bases de Datos Oracle Optimización
Overview Sistemas Computacionales
UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO MODULO IV ADMINISTRACIÓN DE BASES DE DATOS Administración del DBMS E.I. L.E. Prof. Ramón Castro Liceaga SEMINARIO.
PostgreSQL: Parte 1 Integrantes: Álvaro Marciales Claudio Torrez.
Aprenda MySQL en 120 minutos Tutorial. Dirigido a...
Capítulo 7 Gestión de memoria.
Elaborado por: Guillermo Baquerizo I Término
FILTROS. Un filtro es un programa que recibe una entrada, la procesa y devuelve una salida. Relacionando filtros simples podemos hacer prácticamente cualquier.
Programación en Visual Basic Lección #8: SQL Por Antonio F. Huertas.
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 12 Otros Objetos de la Base de Datos.
Utilización de memoria del O3 Server Caché de cubos.
Memoria virtual.
S EGURIDAD DNS - V ULNERABILIDADES, AMENAZAS Y ATAQUES. - M ECANISMOS DE SEGURIDAD. Luis Villalta Márquez.
CICLO DE VIDA Y NORMAALIZACION DE UN SISTEMA DE BASE DE DATOS
Cuentas de usuarios y grupos en windows 2008 server
UNIVERSIDAD LATINA BASES DE DATOS ADMINISTRACIÓN.
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:21 PRESENTACION: BASE DE DATOS ALUMNAS: Adán Millán Sánchez.
PROCEDIMIENTOS ALMACENADOS Es una consulta almacenada en la base de datos en un servidor. Los P.A. Mejoran el Rendimiento Disminuyen el tráfico. Los P.A.
Instrucciones para crear tablas My SQL. A nivel teórico, existen dos lenguajes para el manejo de bases de datos: DDL (Data Definition Language) Lenguaje.
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 0 Introducción.
UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO MODULO IV ADMINISTRACIÓN DE BASES DE DATOS Ajustes de configuración de rendimiento (performance & tuning) E.I.
UNIVERSIDAD LATINA III. MANTENIMIENTO Y GESTIÓN DE LA INFORMACIÓN DE UNA BASE DE DATOS. E.I. L.E. Prof. Ramón Castro Liceaga.
Unidad 2 – Gestión de Procesos
Introducción a la Optimización de Consultas. Francisco Moreno.
Manual violento de Navicat
Unidad 4 SEGURIDAD 4.1 Tipos de usuarios
Tema 11 Bases de Datos y el Lenguaje SQL
Jorge De Nova Segundo. Clientes DNS Se puede considerar que un resolver es cualquier software capaz de preguntar a un servidor DNS e interpretar sus respuestas.
UNIVERSIDAD TECNOLOGICA DE IZUCAR DE MATAMOROS TECNOLOGIAS DE LA INFORMACION Y COMUNICACIÓN BASE DE DATOS PARA APLICACIONES MTRO: GONZALO ROSAS CABRERA.
SQL (Structured Query Language) Lenguaje orientado a bases de datos y sobre todo, al manejo de consultas; el objetivo principal de SQL es la realización.
Colegio de Bachilleres Plantel 13 Xochimilco - Tepepan
MSSQL SERVER CURSO BÁSICO 1. CONCEPTOS BASICOS DE SQL. DESCRIPCIÓN DEL CURSO. Sesión 3: Índices Uso, Creación, Tipos, Eliminación LENGUAJE DE CONSULTAS.
MSSQL SERVER CURSO BÁSICO 1. DESCRIPCIÓN DEL CURSO. Sesión 4: Sentencia Insert,Transacciones,Insert general, Insert Select * From, Sentencia Update,Update.
ADMINISTRACIÓN DE REDES SIZING de Servidores.
Bases de Datos y Sistemas de Gestión de Bases Relacionales.
DISEÑO DE BASES DE DATOS (modelos para el diseño)
BASES DE DATOS CONCEPTOS BASICOS Elizabeth Maite Zarate Machaca “El tratamiento eficiente de la información al servicio del usuario”
Gestión de Memoria – Parte 2
DLM Transact SQL Sesión I Introducción al SQL Server Uso de las herramientas de consultas del Transact SQL.
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
Copyright  Oracle Corporation, All rights reserved. 12 Otros Objetos de la Base de Datos.
Lenguaje MySQL, DDL (Lenguaje de definición de datos) Ing. Linda Masias Morales.
Transcripción de la presentación:

Tunning para MySql

Pasos para el ambiente de performance test Base de datos MySql 5.4 o superior 2gb ram Acceso cuenta root Tablas para realizar pruebas de estrés

Nociones básicas de tunning ¿Quién realiza el tuneo de la base de datos? Todas las personas involucradas con el Software de Mysql, deben de estar envueltas en el proceso de tunning. Diseñadores de la aplicación Desarrolladores de la aplicación Administradores de bases de datos Administradores de sistemas

¿Qué es lo que se tunea? El diseño cuidadoso de los sistemas y aplicaciones es esencial para el performance optimo de cualquier base de datos. En muchos casos la ganancia se puede lograr haciendo un tunning de la aplicación, cuando se debe de considerar el tuneo es cuando la aplicación se encuentra en su ultima fase. El diseño de la aplicación El desarrollo de la aplicación Estructura de la Base de datos El Hardware

Fases del tunning Diseño de la aplicación Desarrollo de la aplicación Configuración de la base de datos Mantenimiento de la aplicación y crecimiento Resolución de problemas

Test Plan El test plan es necesario para el ciclo de testing, aunque parezca distractor, ya que le da un sentido de dirección Evita el típico trabajo duplicado en grupos de varias personas Es la base para el reporte final del análisis *ver testplan.txt

Fuentes de los problemas Mala elección de Indexes Diseño del esquema insuficiente Malas practicas de programación SQL Las variables de servidor no tuneadas apropiadamente Cuellos de botella de hardware o red

Preparación del test plan Quitar el cache de resultados al ejecutar las pruebas de benchmark (seteando =0 el cache) Utilizar lo mas posible el comando explain Utilizar la herramienta mytop

Cambiar una variable a la vez Muchas veces se intenta modificar muchas variables de los parámetros de sistema, pero no siempre es la forma mas eficiente. Puede beneficiar y perjudicar al mismo tiempo Se obtiene mejor experiencia de testing, cambiando una variable a la vez, ejecutar el test y moverse al siguiente candidato

Herramienta MysqlAdmin extended-status Show system status flush-hosts Flush all cached hosts flush-logs Flush all logs flush-status Clear status variables flush-tables Flush all tables flush-threads Flush the thread cache flush-privileges Reload grant tables (same as reload) kill id,id,... Kill mysql threads processlist Show list of active threads in server refresh Flush all tables and close and open logfiles variables Prints variables available

Comando ShowEngine Con este comando nos muestra los engines que están disponibles para MySql y si se encuentra soportado. Seleccionar MyIsam sobre INNODB se debe seguir las recomendaciones de la aplicación, ya que cuentan con diferentes ventajas y desventajas.

INNODB Soporte de transacciones Bloqueo de registros Nos permite tener las características ACID (Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia, Aislamiento y Durabilidad en español), garantizando la integridad de nuestras tablas. Es probable que si nuestra aplicación hace un uso elevado de INSERT y UPDATE notemos un aumento de rendimiento con respecto a MyISAM. Recomendado para alto volumen de datos como un datawarehouse

MyISAM MyISAM Mayor velocidad en general a la hora de recuperar datos. Recomendable para aplicaciones en las que dominan las sentencias SELECT ante los INSERT / UPDATE. Ausencia de características de atomicidad ya que no tiene que hacer comprobaciones de la integridad referencial, ni bloquear las tablas para realizar las operaciones, esto nos lleva como los anteriores puntos a una mayor velocidad.

Innodb storage InnoDB se recupera de un problema volviendo a ejecutar sus logs, mientras que MyISAM necesita repasar todos los índices y tablas que hayan sido actualizados y reconstruirlos si esos cambios no han sido escritos en disco. El primer proceso requiere más o menos el mismo tiempo siempre, mientras que el segundo aumenta con el tamaño de la base de datos. InnoDB almacena físicamente los registros en el orden de la clave primaria, mientras que MyISAM los guarda en el orden en que fueron añadidos. Cuando la clave primaria se escoge de acuerdo con las necesidades de las consultas más habituales esto puede suponer una mejora sustancial del rendimiento. Por otro lado, si los datos se insertan en un orden que difiera sustancialmente del orden de la clave primaria, se obliga a InnoDB a reordenar mucho los datos para mantenerlos en el orden adecuado. InnoDB no dispone de la compresión de datos de la que disfruta MyISAM, de modo que tanto el espacio en disco como la caché en la memoria RAM pueden ser más grandes. Este problema se ha reducido en MySQL 5.0, reduciéndolo en aproximadamente un 20%.

Limitaciones de MyISAM No tiene llaves foraneas ni deletes ni updates en cascada No tiene habilidades de rollback No cumple con los estandares de ACID Limite de rows de 4,284,867,296 Maximo 64 indices por row MyISAM usa bloqueo a nivel tabla, inconveniente para inserts/deletes y updates muy altos La velocidad de lectura es superior a INNODB

Limitaciones de INNODB No tiene índices de texto completo No se puede comprimir Las tablas ocupan mas espacio

Cuando usar cada Engine ¿Cuándo usar MyISAM? El engine de MyISAM fue hecho para cuando la base de datos recibe muchos mas querys que updates, ya que las operaciones de lectura son mucho mas rápidas MyISAM se recomienda usar cuando los insert/update tengan un ratio del 15% ¿Cuándo usar INNODB? INNODB usa bloqueos a nivel ROW, tiene capacidades de commit y recovery, es tolerante a fallas

Convertir tipos de Engines Para crear una tabla con un engine predefinido Create table Test (rid INT) ENGINE=INNODB; Para definir el default por sesión: Set Storage_engine=INNODB Convertir tablas de un engine a otro Alter table test engine=INNODB

Consideraciones de diseño de INNODB Emula la arquitectura de Oracle Sistemas unicos Buffering de inserts Index hash DataDictionary Interno Undo Insert Buffer MySQL Replication info

Limites de tamaño con InnoDB Tamaño máximo de una tabla: 32GB Columnas por tabla: 1000 Tamaño máximo de la llave 3500 caracteres Tamaño máximo del tablespace 64TB Numero máximo de transacciones concurrentes: 1023

InnoDB Monitor El monitor de InnoDB provee información sobre el estado interno de INNODB, esta es información valiosa para realizar el tunning Para iniciar el monitor se crea una tabla con un nombre especial, que hace que el InnoDB escriba el output del monitor periódicamente, además el Monitor de InnoB es accesible sobre demanda ejecutando: Show engine innodb status;

Lo que muestra el monitor de Innodb El estándar que muestra el monitor de innodb es: Las tablas y registros bloqueados en cada sesión activa. Los Locks que esperan una transacción Los semáforos que esperan una transacción Transacciones de I/O pendientes Estadísticas del Buffer pool Buffer del insert y purge del thread de Innodb La tabla que hay que crear para el monitor es: Innodb_monitor Create table innodb_monitor (a int) engine=innodb;

Monitor de InnoDB El monitor de locks Es igual al monitor estándar, pero muestra información mas completa sobre los bloqueos de las tablas La tabla para el lock monitor es inno_lock_monitor Semaphores Muestra las estadísticas de los semáforos que administran los bloqueos en las tablas, un alto índice de estos semáforos se puede deber a un alto paralelismo de los querys, para resolver este problema se puede ajustar la variable de sistema innodb_thread_concurrency, definiendo un valor mas pequeño al default

Monitor de Innodb de tablespace Monitor que verifica los tablespaces Para activarlo es creando la tabla Innodb_file_per_table

Comando Show Variables Para buscar variables especificas es con ‘Show variables like ‘%cache%’;’ Para ver las estadísticas de las variables definidas es con el comando ‘Show status;’ Para ver el reporte de las conexiones y los usuarios es con el comando ‘show processlist’ ‘Show index’ para ver los índices creados Show innodb status – nos muestra el status del engine innodb

MySQL Server Tunning Parámetros básicos de tunning: Max_connections – El numero máximo de conexiones al servidor Key_buffer_size – proporcionalmente para el tamaño de los índices de la base de datos, se recomienda 256mb en una base estándar. Thread_cache_size – el cache para los threads Table_cache_size – se define dependiendo del status de ‘opened_tables’

Scripts de autotunning de MySql Mysqltuner.pl – script de phyton que compara las variables y las tablas de monitoreo

InnoDB Lock Modes InnoDB implementa bloqueos a nivel campo, existen dos tipos de bloqueos: Un bloqueo Shared, que permite la lectura del campo Un bloqueo Exclusive, que permite la transacción para actualizar o eliminar el campo. Por ej. Si las transacciones T1 mantienen un bloqueo en la columna X, si se quiere lanzar una segunda transaccion T2 ocurre lo siguiente: El request de T2 obtiene ademas un bloqueo para la columna X y tanto T1 como T2 lockean el campo. Adicionalmente InnoDB soporta locking granular, que permite la coexistencia de bloqueos de campos y bloqueos de toda la tabla.

Los shared locks se hacen intencionalmente con el comand Select … lock in share mode Las compatibilidades entre los bloqueos son las siguientes: X IX S IS Conflicto Compatible

Desarrollo de la aplicación Optimización del SQL

Optimización de índices Los índices mal hechos son iguales a no tener ningún índice y son una forma de bajar el performance La buena selectividad de los campos de índices Los índices de múltiples columnas, el orden de los campos es muy importante Tener demasiados índices también quita performance mientras mas datos de un índice quepan en un solo bloque de memoria, mas rápido será el query

Sintaxis creación de índices create index Test on Tabla_prueba col_name (columna1, columna2) using BTREE; CREATE TABLE lookup (id INT) ENGINE = MEMORY; CREATE INDEX id_index ON lookup (id) USING hash order by ; Los ordenes de las columnas son importantes, tambien se puede declarar si se acomodaran en orden ascendente o decendente. El tipo de indice BTREE se usa para la mayoria de los casos, solo en caso de las tablas con engine en Memory se recomienda el uso de hash

Recomendaciones de índices Minimizar el tamaño de la llave primaria que es usada para referenciar otras tablas Usar columnas con auto_increment puede ser mas optimo

Uso del Query Execution plan Para ver el QEP, se utiliza el comando explain El explain te dice: en que orden son leídas las tablas que tipos de operaciones de lectura son hechas que índices han sido utilizado Como las tablas se referencian entre si cuantos campos el optimizador estima obtener de cada tabla

Optimización de los índices Un índice de toda la columna no siempre es necesario Los índices compuestos nos sirven para buscar en las primeras columnas del índice

Logueando los querys lentos El slow query log -los querys que toman mucho tiempo son long_query_time - Tamben se pueden loguear los querys que no usan indices con --log-queries-not-using-indexes -Para tener un log de los comandos administrativos usar -log-slow-admin-statements -para analizar el contenido del slow log se usa mysqldumpslow