Sei sulla pagina 1di 38

<Insert Picture Here>

Prácticas recomendadas en Afinación de Bases de


Datos MySQL

Twitter: @mysql_espanol
Facilitadores
• Pedro.Andrade@Oracle.com
• Responsable en la adopción de MySQL en latam
• Empleado MySQL previo a compra por Sun, y Oracle
• 11+ años de experiencia en el mercado de las TI

• Manuel.Contreras@Oracle.com
• Ingeniero consultor de MySQL para latam
• Empleado de Sun, desde el 2003
• Certificado como MySQL DBA, Java Programmer, Jave EE
Developer
• Pro Open Source: Linux, Java, Php, MySQL...
Compromiso de Oracle hacia clientes,
desarrolladores y usuarios de MySQL
• Continuo desarrollo de MySQL Enterprise & Community bajo
licenciamiento público (GPL)

• Mayor inversión en desarrollo & investigación (R&D)

• Creación de una Junta Consultiva de Clientes de MySQL

• Continuidad de opciones de soporte Enterprise (anual o multi-anual)

• http://www.oracle.com/us/corporate/press/042364
Inversión en Software Libre
• Apoyando proyectos open source por muchos años
• Parte de la estrategia, “Complete. Open. Integrated.”
• Acelerar la innovación
• Extender la comunidad de desarrolladores
Estrategia:
Completa. Abierta. Integrada.
• Desarrollo
• Pruebas
• Administración
• Mantenimiento
• Basada en estándares abiertos
• Bajo costo
• Bajo riesgo
• Más confiable
La oferta mas completa en LAMP Stack

Apps • Oracle Enterprise Linux


Eclipse
NetBeans • Oracle VM (Xen-based)

Apache • Apache, GlassFish


Glassfish

• MySQL
MySQL

• PHP, Perl, Python, Ruby, Java,


Oracle Enterprise
Linux & Oracle VM
C, C++
Completa. Abierta. Integrada.
2 atributos más importantes:
• Oracle busca siempre ser el
#1 en cada nivel
• “Completa” quiere decir que
cumplimos con los
requerimientos de nuestros
clientes en cada nivel
* Por eso MySQL es
importante para Oracle y
sus clientes
Inversión en MySQL

• Mejorar MySQL
• #1 Open Source Database for Web Applications

• Desarrollar, Promover y dar Soporte a MySQL


• Mejorar la ingeniería, consultoría y soporte
• Tomar ventaja de la estructura global de soporte de Oracle

• MySQL Enterprise 5.5


• Mejor performance que versiones anteriores
• Enterprise Monitor
• Enterprise Backup
• Workbench
• Soporte 24x7
Inversión en MySQL

• MySQL - Áreas de Enfoque


• Web, Embedded & Telecom
• LAMP
• Windows

• Clientes Oracle + MySQL


• Oracle Enterprise Manager
• Oracle Secure Backup
• Oracle Audit Vault
MySQL
¡Haciendo un mejor MySQL Hoy!
MySQL, stack de software OpenSource
Web 2.0 / Enterprise 2.0
• LAMP
– OS: Linux
– Application Server: Apache
– Database: MySQL
– Programming Language: Perl, Php, Python
• LAMJ
– Java EE
• Actualmente inversión en MS Windows
– Productivos
– Desarrollo
• Continua la inversión en Linux como plataforma OSS
MySQL Enterprise Edition

• MySQL Workbench
– Administración:
– MER:
– Desarrollo de SQL (wizards)
• MySQL Enteprise Monitor
– Panel de Control para DBAs
• Alertas, monitor signos vitales, y performance advisors
• Query Analyzer
• Soporte Técnico – Oracle Premier Support
– 24x7
– Ingenieros especialistas en MySQL
• MySQL Enterprise Backup
– Hot backups / online backups
– incremental
MySQL Workbech
MySQL Workbech: administración DBAs
MySQL Workbech: desarrollo SQL
MySQL Workbech: Diagramas EER
MySQL Enterprise Monitor
• Vista única consolidada del
ambiente MySQL
• Auto descubrimiento de
servidores MySQL, replicación
y topologías
• Alertas y monitoreo adpatable
y basado en reglas
• Identificación de problemas
antes de que ocurran
• Reducción de riesgo y tiempo
de inactividad
• Facilidad para escalamiento
horizontal sin requerir más Un asistente DBA Virtual para
DBAs MySQL
Posibles Causas de Bottlenecks
• Application Tier
• Middleware: Java, PHP, .Net, C++, etc...
• Networking
• Comunicaciones: swtich, hub, routers, etc..
• Storage
• Tipo HD, File Systems, RAID, IO Latency
• Hardware Issues
• CPU, RAM, IO Contention
• RDBMS
• índices, schema, normalización
• Arquitectura RDBMS
• Read / Writes Split
• Replicación ( Latencia )
• Síncrona, Asíncrona, Semi- Sync
Benchmarking & Profiling
• Benchmarking
• Conjunto de técnicas que permite determinar el como se
desempeña un sistema
• Benchmark Full Stack
• Desde el request del cliente, hasta la ejecución de
transacción / operación en disco duro
• Benchmark específico por aplicación
• Aisla el resto de los componentes de la arquitectura
• Básico para saber: Donde estamos parados y si es susceptible
a mejorar
• Profiling
• Conjunto de técnicas que permiten determinar el por que se
desempeña un sistema de acuerdo a los resultados de un
benchmark
• Profiling Full Stack
• Profiling específico por aplicación
Benchmarking
• Métricas:
• Transacciones Por Unidad de Tiempo
• Tiempo de Respuestas ( Latency )
• Concurrencia
• Escalabilidad

• Errores comunes
• Usar solo un sub-set de datos

• Single user, en escenarios multi-user

• Ejecutar queries idénticos en un loop ( Query Cache )

• No considerar el tiempo en que el servidor entra en estado


warm ( cálido )
Benchmarking

• Full Stack Tools


• Jmeter Apache
• Generador de carga http
• JDBC, generador de carga para BDs
• GUI

• Single Component Tools


• sysbench: CPU, IO, Memory, Threads

• MySQL Benchmark Suite (sql-bench)

• Emular transacciones

• Inserts, selects, ACID


Profiling
• Log (bitácoras) MySQL
• General log (log=file)
• Todos los queries sin importar el resultado
• Error Log (log-error=file)
• Errores del sistema
• Slow queries Log (log_slow_queries=file)
• Queries que demoran más de un tiempo específico
• long_query_time=N
• Binary Log (log-bin=file)
• Update, Inserts
• NO Selects
• mysqlbinlog utility

• Variables, se configuran en archivo:


• my.cnf (Unix)
• my.ini (MS Windows)
MySQL Server: Configuración
• basedir: directorio home de binarios MySQL
/usr/local/mysql
• datadir: directorio home de datos, índices, tablas, schemas, etc...
/data/mysql
• Socket: TCP/IP ( file )
/data/mysql/mysql.sock
• PID-File: Process ID mysqld
/data/mysql/mysql.pid
• my.cnf File ( archivo de Configuración: plantillas )
/etc/my.cnf
BASEDIR/support-files ( plantillas )
• Logs
• Configuración en my.cnf
• Storage Engines
• Algoritmos para procesamiento de datos
• MyISAM, InnoDB, Memory, NDB Cluster, Archive, etc...
Optimización MySQL
• Optimización de variables del servidor
• my.cnf ( afinación )
• Soporte técnico MySQL
• Soporte a través de sistema web (service tickets)
• Telefónico 24x7
• Objetivo: resolver cualquier posible problema en la
configuración del motor de base de datos MySQL
• Servicios pro-activos de consultoría
• Soporte a través de sistema web (service tickets ), Telefónico
• Performance tuning
• Objetivo: encontrar la configuración óptima del ambiente,
afinación de variables my.cnf, la cual explote la arquitectura
en HW, recursos, OS, y tipo de queries, datos

• MySQL Enterprise Monitor


• Advisors
Optimización de Queries
• Optimización de índices
• Re estructura de queries
• Re definición de tablas
• Particionamiento horizontal
• Particionamiento vertical
• Soporte técnico MySQL
• Web support site
• Teléfonico
• Objetivo: encontrar la mejor afinación a queries
• Servicios pro-activos de consultoría
• Performance tuning sobre índices, joins, views, store
procedures, etc..

• MySQL Enterprise Monitor


• Query Analyzer
Explain Query (1)
Explain Query (2)

1)

2)
Explain Query (3) – No index
Optimizando Query
Agregando índices
• Índices
Explain Query - con Índices
Optimización de Servidor
• Optimización de variables my.cnf
• Buffers Size, Pool de conexiones, threads, etc..
• Query Cache
• Fulltext Index – MyISAM
• Particionamiento de Tablas
• Horizontal
• Range, List, Hash, Key
• Obteniendo información
• Show variables \G ( valores de variables establecidos )
• Show status \G ( valores de signos vitales )
• Show engine InnoDB status \G
• Show processlist \G
• MySQL Enterprise Monitor
• Alertas
Recomendaciones Generales
• Utilizar la versión compilada para la plataforma elegida
• Solaris PKG
• Linux (.rmp, .deb)
• Tratar de evitar las versiones (.tar.gz) tarball
• Utilizar MySQL Enterprise Server a 64 bits
• MySQL Enterprise provee actualizaciones que Community integra en un
periodo mayor de actualización
• mysql>select VERSION();
• Utilizar un tipo de Storage Engine, adecuado al tipo de operaciones, tabla
• Utilizar las plantillas my.cnf, y hacer pruebas de benchmarking para encontrar la
que de mejores resultados
• Performance tuning
• Obtener información de monitor y recomendaciones del MEM
• Optimización de queries
• Particionamiento de tablas
• Query Cache
<Insert Picture Here>

Pedro.Andrade@Oracle.com
Manuel.Contreras@Oracle.com
@mysql_espanol
Blog: mysql-espanol.org