Professional Documents
Culture Documents
Miguel R. Luaces
Laboratorio de Bases de Datos
Universidade da Coruna
Contenidos
1 Introduccion a MySQL
2 Replicacion
3 Copia de seguridad y recuperacion
4 Medicion de rendimiento y perfilado
Medicion del rendimiento
Perfilado de aplicaciones
5 Optimizacion
Optimizacion de esquemas e ndices
Optimizacion de hw. y sw.
Optimizacion del servidor
Contenidos
1 Introduccion a MySQL
2 Replicacion
3 Copia de seguridad y recuperacion
4 Medicion de rendimiento y perfilado
Medicion del rendimiento
Perfilado de aplicaciones
5 Optimizacion
Optimizacion de esquemas e ndices
Optimizacion de hw. y sw.
Optimizacion del servidor
MariaDB
An enhanced, drop-in replacement for MySQL
Version actual: 5.5.36
Documentacion: https://kb.askmonty.org/en/
Funciona sobre todas las plataformas: Mac OS X, Windows,
GNU/Linux
Mejoras sobre MySQL 5.5:
Mas motores de almacenamiento (ej.: No-SQL)
Optimizaciones
Extensiones (ej.: virtual columns)
Completamente Open Source
Arquitectura de MySQL
Clientes
Cach de Analizador
consultas sintctico
optimizador
Motores de almacenamiento
Enxenara Informatica Miguel R. Luaces (luaces@udc.es) - Juan Ramon Lopez Rodrguez
BD3: Diseno Fsico - MySQL
Introduccion a MySQL
Arquitectura de MySQL
Cada consulta es atendida por un thread del pool servidor
La cache consultas almacena sentencias select junto con su resultado
Si la consulta no esta en cache, tras el analisis sintactico, se realiza
la optimizacion del plan de ejecucion
Reescritura de la consulta
Determinacion del orden de acceso a las tablas
Seleccion de los ndices a utilizar
Inclusion de las caractersticas especficas de los motores de
almacenamiento
Arquitectura de MySQL
Caracterstica unica: separacion de tareas de servidor (conexiones,
procesamiento de consultas, optimizacion) de tareas de
almacenamiento y recuperacion de datos
Se puede elegir el motor de almacenamiento a nivel de tabla
Se pueden cargar motores de almacenamiento en tiempo de ejecucion
Describiremos brevemente los siguientes aspectos de MySQL:
Control de concurrencia
Gestion de transacciones
Motores de almacenamiento
Criterios de seleccion
Control de concurrencia
Los bloqueos permiten evitar que un cliente lea un fragmento de
datos mientras otro lo esta cambiando
Hay dos tipos de bloqueos: compartidos (lectura) y exclusivos
(escritura)
Los SGBD permiten distintas granularidades a los bloqueos (tabla,
pagina o fila)
Los bloqueos de fila minimizan la cantidad de datos por lo que
aumenta la concurrencia
Los bloqueos de tabla minimizan el consumo de memoria por lo que
aumenta el rendimiento
Cada motor de almacenamiento de MySQL define su propia poltica
y granularidad. El servidor no es consciente de los bloqueos.
Control de concurrencia
MyISAM, Memory y Merge realizan bloqueos a nivel de tabla
Cada motor lo implementa a su modo con optimizaciones para
mejorar el rendimiento
Necesita muy poca memoria
Ideal en el caso de que las lecturas sean mucho mas frecuentes que
las modificaciones
Es eficiente en el caso de modificaciones simultaneas en varias filas
InnoDB realiza bloqueos a nivel de fila
Permite la maxima concurrencia a costa de mayor consumo de
memoria
Ideal en el caso de cambios frecuentes o transacciones largas
Es muy eficiente en el caso de cancelacion de transacciones
El servidor de MySQL puede bloquear tablas independiente del motor
para garantizar correccion de sentencias DDL como ALTER TABLE
Gestion de transacciones
MySQL incluye motores transaccionales (InnoDB) y no
transaccionales (MyISAM, Memory)
El estandar SQL define cuatro niveles de aislamiento:
Read uncommited
Read commited
Repeatable read
Serializable
Las figuras de las siguientes diapositivas se extrajeron de aqu:
http://www.byteslounge.com/tutorials/spring-transaction-isolation-tutorial
Gestion de transacciones
Read uncommited
No hay bloqueos, por lo que una transaccion lee datos sin confirmar
de otra transaccion
Permite lecturas sucias porque la segunda transaccion podra ser
cancelada
Gestion de transacciones
Read commited
Los bloqueos de escritura se mantienen hasta el fin de la transaccion
Los de lectura se liberan al finalizar la lectura
Una transaccion solo lee datos de transacciones confirmadas
Permite lecturas no-repetibles porque los datos podran cambiar
despues de leidos
Gestion de transacciones
Repeatable read
Todos los bloqueos se mantienen durante toda la transaccion
Cualquier fila que lea una transaccion sera igual en sucesivas lecturas
Como no hay bloqueo de rangos, permite lecturas fantasma
Es la predeterminada en InnoDB
Gestion de transacciones
Serializable
Aislamiento completo de las transacciones usando bloqueos de rango.
InnoDB permite el nivel de aislamiento serializable mediante
Multiversion Concurrency Control (MVCC)
Mantiene instantaneas de los datos tal y como existan en un
determinado momento
Diferentes transacciones ven simultaneamente datos distintos en las
mismas tablas
Evita la necesidad de bloquear filas en modo lectura
Gestion de transacciones
Interbloqueos (Deadlocks)
El funcionamiento de los bloqueos es especfico del motor de
almacenamiento
Los interbloqueos son inevitables ya que ocurren por conflictos reales
en las transacciones
Los interbloqueos producen consultas lentas o que sobrepasan tiempo
maximo
La solucion consiste en reanudar alguna de las transacciones
InnoDB detecta dependencias circulares y reanuda la transaccion con
los bloqueos de fila menos exclusivos
Gestion de transacciones
Registro de transacciones (Write-ahead logging)
El almacenamiento inmediato de los cambios en los datos es lento
Los cambios realizan en la copia en memoria de la pagina de disco
El almacenamiento en disco se realiza mediante un registro de
transacciones usando escritura secuencial (y por tanto, rapida)
Los datos en disco se escriben cuando la pagina se elimina de
memoria
En caso de fallo del servidor, los cambios se pueden recuperar
Uso de varios motores de almacenamiento en transacciones
Cada motor de almacenamiento gestiona el funcionamiento de las
transacciones
No se pueden combinar de forma fiable motores de almacenamiento
diferentes en una transaccion
Por ejemplo, los cambios en tablas MyISAM no se pueden deshacer
con un rollback
MySQL no informa del error de ninguna manera
Contenidos
1 Introduccion a MySQL
2 Replicacion
3 Copia de seguridad y recuperacion
4 Medicion de rendimiento y perfilado
Medicion del rendimiento
Perfilado de aplicaciones
5 Optimizacion
Optimizacion de esquemas e ndices
Optimizacion de hw. y sw.
Optimizacion del servidor
Definicion de replicacion
Consiste en configurar uno o varios servidores como esclavos - o
replicas - de otro servidor
Problema a resolver: mantener los datos de los servidores
sincronizados
Base para construir aplicaciones extensas y de alto rendimiento
Admite diferentes topologas
Muchos esclavos pueden conectarse a un maestro
Un esclavo puede, a su vez, actuar como maestro
Se puede replicar:
todo el servidor
determinadas bases de datos
solo algunas tablas
Funcionamiento de la replicacion
El maestro registra todos sus cambios como eventos del registro
binario (binary log)
El esclavo copia los eventos del registro binario a su registro de
repeticion (relay log)
El esclavo repite todos los eventos del registro de repeticion sobre
sus propios datos
Funcionamiento de la replicacion
El registro binario de mySQL:
Funcionamiento de la replicacion
El registro binario de mySQL permite tres tipos de replicacion:
Basada en sentencias (statement-based replication)
Se registra la instruccion que cambia los datos en el maestro
La utilizada por defecto. Sencilla de implementar y compacta.
Estable desde MySQL 3.23
Hay instrucciones que no se pueden replicar (detalles en el manual)
Basada en filas (row-based replication)
Se registran las filas cambiadas y el cambio realizado
Permite la replicacion de cualquier instruccion
El registro aumenta de tamano
No es facil auditar los cambios realizados
Mixta (mixed-format replication)
MySQL decide en funcion de la instruccion que se ejecuta si se usa
replicacion basada en sentencias o en filas
Se usa la replicacion basada en sentencias a no ser que la instruccion
no sea segura
Ver la descripcion en el manual
Enxenara Informatica Miguel R. Luaces (luaces@udc.es) - Juan Ramon Lopez Rodrguez
BD3: Diseno Fsico - MySQL
Replicacion
Funcionamiento de la replicacion
El proceso para configurar la replicacion es el siguiente:
Configurar cuentas de replicacion en cada servidor
El thread E/S del esclavo hace una conexion TCP/IP al maestro
para leer el registro binario. Por lo tanto, necesita una cuenta de
usuario en el maestro con los permisos apropiados
Configurar maestro
Activar el registro binario y asignarle un id al servidor
Configurar esclavo
Asignarle un id al servidor y activar el registro de repeticion
Inidicar al esclavo como conectarse al maestro y desde que punto del
registro binario hay que replicar
Opcionalmente, activar el registro binario y configurar su
actualizacion
Funcionamiento de la replicacion
Es posible replicar solo parte de los eventos de un servidor,
utilizando diferentes tipos de filtros
Filtros sobre el registro binario del maestro
Filtros sobre el registro de repeticion
Topologas de replicacion
Las restricciones en la replicacion son las siguientes:
Cada esclavo solo puede tener un maestro
Un maestro puede tener muchos esclavos
Un esclavo puede actuar tambien como maestro
Estas restricciones permiten diferentes topologas con diferentes
aplicaciones
Un maestro, multiples esclavos
Maestro-maestro en modo activo-activo
Maestro-maestro en modo activo-pasivo
Anillo
Maestro, maestro de distribucion, esclavos
Arbol o piramide
Topologas de replicacion
Un maestro, multiples esclavos
Topologas de replicacion
Un maestro, multiples esclavos
La topologa mas sencilla y mas comun
Todas las escrituras se realizan en el maestro, las lecturas se pueden
realizar en cualquier servidor
El numero de esclavos esta limitado por la capacidad de
procesamiento y el ancho de banda del maestro
Variantes:
Usar cada esclavo para funciones diferentes (ej.: ndices diferentes,
motores diferentes)
Tener un esclavo en un centro remoto para recuperarse de un
desastre
Retrasar un esclavo en el tiempo para facilitar la recuperacion
Utilizar un esclavo para copia de seguridad, para pruebas o para
desarrollo
Topologas de replicacion
Maestro-maestro en modo activo-activo
Topologas de replicacion
Maestro-maestro en modo activo-pasivo
Topologas de replicacion
Anillo
Topologas de replicacion
Anillo
Tres o mas maestros
Cada servidor es un esclavo del servidor que esta antes en el anillo, y
maestro del servidor que esta despues
Configuracion simetrica, failover facil.
Es una configuracion fragil:
Depende enormemente de que todos los nodos funcionen
correctamente
Difcil que esten todos sincronizados a la vez: detener algun nodo es
complicado
Si eliminamos un nodo sin tener cuidado, sus eventos pueden
propagarse de forma infinita por el anillo. El unico nodo que filtra un
evento es el que lo ha generado!
Topologas de replicacion
Maestro, maestro de distribucion, esclavos
Topologas de replicacion
Maestro, maestro de distribucion, esclavos
Similar a la topologa maestro-esclavos, pero no sobrecarga al
maestro principal
El maestro principal solo tiene un esclavo que a su vez actua como
maestro de distribucion
El maestro de distribucion usa el motor BlackHole que graba en el
registro binario pero no mantiene tablas ni datos
Topologas de replicacion
Arbol o piramide
Topologas de replicacion
Arbol o piramide
Si hay muchos esclavos, puede ser mas rentable un diseno en
piramide
Esto alivia la carga del maestro y la redistribuye por los diferentes
esclavos
Desventaja: fallos en niveles intermedios afectan a un gran numero
de servidores
Ademas, cuantos mas niveles intermedios, mas difcil y complicado
es manejar los fallos
Problemas en la replicacion
La replicacion implica varias tareas complejas:
Contenidos
1 Introduccion a MySQL
2 Replicacion
3 Copia de seguridad y recuperacion
4 Medicion de rendimiento y perfilado
Medicion del rendimiento
Perfilado de aplicaciones
5 Optimizacion
Optimizacion de esquemas e ndices
Optimizacion de hw. y sw.
Optimizacion del servidor
Introduccion
Recuperacion no es restauracion
Restaurar: recuperar datos desde una copia de seguridad y cargarlos
en una base de datos
Recuperar: todo el proceso de rescatar un sistema o parte de el.
Incluye todos los pasos para lograr que un servidor vuelva a ser
completamente funcional y operativo:
Restaurar copia de seguridad
Reiniciar servidor
Cambiar configuracion
Calentar las caches del servidor
Utilidades de las copias de seguridad
Recuperacion ante desastres. Un error importante corrompe los datos
o el servidor
Recuperacion ante cambios no deseados. La gente cambia de idea, y
ocurre mas a menudo que los desastres
Auditoras. Necesidad de recuperar datos o esquema en algun
momento del pasado (ej. temas judiciales)
Pruebas. La manera mas facil de cargar un servidor de pruebas con
datos es usando una copia de seguridad
Enxenara Informatica Miguel R. Luaces (luaces@udc.es) - Juan Ramon Lopez Rodrguez
BD3: Diseno Fsico - MySQL
Copia de seguridad y recuperacion
Introduccion
El mejor sistema de copias de seguridad no es suficiente. Un buen
plan de recuperacion es fundamental
El procedimiento de recuperacion es complejo. Es facil cometer
errores
Las copias de seguridad son rutinarias y no se realizan bajo
situaciones de presion extrema. La recuperacion se hace en medio de
una situacion de crisis
Una persona puede planear, disenar e implementar las copias de
seguridad, pero podra no estar disponible cuando se produzca el
desastre. Es necesario formar a personal cualificado para que se
encargue de la recuperacion
Alternativas que no son copias de seguridad
La replicacion no es una copia de seguridad
Usar discos en RAID
Como nos recuperamos en estos casos de un DROP DATABASE?
Contenidos
1 Introduccion a MySQL
2 Replicacion
3 Copia de seguridad y recuperacion
4 Medicion de rendimiento y perfilado
Medicion del rendimiento
Perfilado de aplicaciones
5 Optimizacion
Optimizacion de esquemas e ndices
Optimizacion de hw. y sw.
Optimizacion del servidor
Contenidos
1 Introduccion a MySQL
2 Replicacion
3 Copia de seguridad y recuperacion
4 Medicion de rendimiento y perfilado
Perfilado de aplicaciones
5 Optimizacion
Contenidos
1 Introduccion a MySQL
2 Replicacion
3 Copia de seguridad y recuperacion
4 Medicion de rendimiento y perfilado
Perfilado de aplicaciones
5 Optimizacion
Proceso de perfilado
Es necesario incluir codigo de perfilado en las aplicaciones que tome
mediciones de:
Tiempo total de ejecucion de la pagina
Tiempo de ejecucion de las consultas
Tiempo de llamadas a recursos externos (servicios web)
Es una sobrecarga al sistema, por lo que es necesario aplicar tacticas
como
Solo realizar el perfilado en un porcentaje pequeno de las peticiones
Guardar los datos en memoria y hacerlos persistentes en bloque
Perfilado en MySQL
MySQL mantiene dos registros de consultas: el registro general y el
registro de consultas lentas
El registro general
Se guardan todas las consultas que se reciben aunque por error no se
terminen ejecutando
Se guardan los eventos de conexion y desconexion
Sin tiempos de ejecucion: de poco interes para el perfilado
El registro de consultas lentas
Registra las consultas ejecutadas que sobrepasan un determinado
tiempo
Se puede configurar para registrar tambien las consultas que no
utilizan ndices
Guarda tiempos de ejecucion: permite perfilado
Es difcil de utilizar:
Una consulta es lenta porque tarda mas de lo esperado, no porque
tarda mas que un umbral de tiempo
Hay consultas que no tienen que usar el ndice de ningun modo
Perfilado en MySQL
Desde la version 5.1.28, MySQL permite realizar perfilado de los
recursos usados en una sesion
Se activa mediante la variable profiling
Se consulta mediante SHOW PROFILES y SHOW PROFILE [FOR
QUERY n]
Registra multitud de variables para cada uno de los estados de todas
las consultas ejecutadas
Los datos se pueden consultar agregados o a nivel de consulta
individual
Los datos se guardan en memoria mientras dure la sesion
La estrategia de analisis de resultados puede ser:
Comprobar que consultas tienen mas impacto
Comprobar el plan de ejecucion de esas consultas con EXPLAIN
Realizar los ajustes necesarios
Repetir el analisis
Contenidos
1 Introduccion a MySQL
2 Replicacion
3 Copia de seguridad y recuperacion
4 Medicion de rendimiento y perfilado
Medicion del rendimiento
Perfilado de aplicaciones
5 Optimizacion
Optimizacion de esquemas e ndices
Optimizacion de hw. y sw.
Optimizacion del servidor
Indices
Mas importantes a medida que nuestros datos crecen
Por ejemplo, en una consulta como
SELECT first_name FROM actor where actor_id=5;
Si hay ndice sobre actor id se busca sobre el ndice y se recuperan
punteros a las filas en la tabla
Si se define el ndice sobre varias columnas el orden en el que se
indican las columnas es muy importante ya que MySQL solo busca
eficientemente el prefijo en la parte mas a la izquierda del ndice
Crear un ndice sobre dos columnas no es lo mismo que crear dos
ndices de una sola columna independientes
Los ndices se implementan a nivel de motor de almacenamiento (no
en capa de servidor), por lo que no todos los motores admiten todos
los tipos de ndices
Arbol B y B+
Admitido por todos los motores (menos Archive)
Cada motor lo implementa a su modo. Por ejemplo, MyISAM usa
compresion mientras que InnoDB no usa compresion
Idea general: todos los valores se almacenan en orden y se accede
mediante un arbol en el que cada hoja esta a la misma distancia de
la raz y las paginas de hojas contienen punteros a los registros de la
tabla.
Agiliza acceso a los datos. Se realiza un acceso al nodo raz y e va
descendiendo por las ramas escogiendo punteros adecuados hasta
llegar al valor correcto.
Arbol B y B+
Arbol B y B+
Tipos de consulta que pueden usar ndice de un arbol B
Coincidencia con valor completo.
apellidos = Allen and nombre = Cuba and fnac = 01-01-1960
Coincidencia parcial con prefijo de columna
apellidos like A %
Coincidencia parcial con prefijo mas a la izquierda
apellidos = Allen and nombre like C %
Coincidencia con rango de valores
apellidos >= Allen % and apellidos <= Barrimore %
Clausulas ORDER BY por los campos del ndice
Arbol B y B+
Limitaciones. No son utiles en:
Busquedas que no empiezan en la parte mas izquierda de las
columnas indizadas. Ejemplos:
nombre = Cuba and fnac = 01-01-1960
apellidos like %Z
No permiten saltar columnas del ndice. Ejemplo:
apellidos = Allen and fnac = 01-01-1960
No se optimiza el acceso a columnas a la derecha de la primera
condicion de rango. Por ejemplo:
apellidos = Allen AND nombre >= J AND fnac = 23-12-1976
Indices Hash
Solo soportado por el motor Memory (el indice por defecto)
Para cada fila se crea un codigo hash con las columnas indizadas
El ndice es una tabla hash con apuntadores de fila (muy compactos)
Las colisiones de la funcion hash se almacenan con una lista enlazada
Util solo para busquedas que usan todas las columnas del ndice. No
admiten coincidencia parcial de clave
Problemas
No se pueden usar los ndices para ordenar ya que el ndice ordena
por hash, no por el valor original.
No evita leer las filas ya que en el ndice solo se almacena un punto
al registro
Solo permite comparaciones de igualdad (=, IN) pero no consultas
de rangos (>100)
Las colisiones de la funcion hash ralentizan el acceso y el
mantenimiento
Es posible simular ndice hash con una columna extra, un arbol B+ y
triggers
Enxenara Informatica Miguel R. Luaces (luaces@udc.es) - Juan Ramon Lopez Rodrguez
BD3: Diseno Fsico - MySQL
Optimizacion
Optimizacion de esquemas e ndices
Indices agrupados
Las filas de las tablas se guardan en las paginas hoja del ndice
Las filas con valores de clave adyacentes se guardan juntas
Ahorra operaciones de E/S en consultas con datos relacionados
Los ndices tradicionales pueden ocupar mas espacio del esperado ya
que en vez de punteros a registros almacenan valores de clave
primaria
No todos los motores los admiten
InnoDB lo hace implcito con la clave primaria, con un ndice unico
sin valores NULL, o con una clave interna oculta
Inconvenientes:
Solo ahorra E/S si los datos no caben en memoria
La velocidad de insercion depende del orden de insercion (lo mejor,
en el orden de la clave primaria)
La actualizacion es costosa debido a la reubicacion de paginas
Paginas mas sujetas a fragmentacion al insertar filas nuevas
Pueden ser mas lentas para escaneos completos
Enxenara Informatica Miguel R. Luaces (luaces@udc.es) - Juan Ramon Lopez Rodrguez
BD3: Diseno Fsico - MySQL
Optimizacion
Optimizacion de esquemas e ndices
Otros ndices
Indices espaciales (arbol R)
Solo en motor MyISAM
Solo para los tipos de datos y operaciones de geometra espacial
(GEOMETRY)
El soporte espacial de MySQL no es muy completo
Indices de texto completo
Solo en el motor MyISAM
Permite busquedas de palabras clave en textos y calculo de
relevancias
Soporta conceptos de recuperacion de informacion (stopwords,
lematizacion, busqueda booleana)
Tablas de contadores
Se aconseja que las tablas de contadores sean independientes
Resulta en tablas rapidas y pequenas
Un contador es esencialmente un semaforo que crea problemas de
concurrencia
CREATE TABLE hit_counter (cnt int unsigned not null);
UPDATE hit_counter SET cnt=cnt+1;
Se recomienda paralelizar mediante contadores parciales:
CREATE TABLE hit_counter (slot tinyint unsigned not null
primary key, cnt int unsigned not null);
UPDATE hit_counter SET cnt=cnt+1 WHERE slot=RAND()*100;
SELECT SUM(cnt) FROM hit_counter;
Desnormalizacion
Las actualizaciones normalizadas son mas rapidas que las no
normalizadas
En los datos normalizados no hay redundancia por lo que hay menos
datos que modificar
No tener redundancia implica un menor uso de DISTINCT o
GROUP BY
Las tablas normalizadas son mas pequenas por lo que encajan mejor
en memoria
Sin embargo, en un esquema normalizado las recuperaciones
implican combinaciones que son costosas
Contenidos
1 Introduccion a MySQL
2 Replicacion
3 Copia de seguridad y recuperacion
4 Medicion de rendimiento y perfilado
Medicion del rendimiento
Perfilado de aplicaciones
5 Optimizacion
Optimizacion de esquemas e ndices
Optimizacion de hw. y sw.
Optimizacion del servidor
Introduccion
El hardware y el software sobre los que se ejecuta SGBD determinan
la eficiencia de MySQL (tamano de disco, memoria disponible,
recursos de CPU, red . . . )
Se necesitan directrices para resolver cuellos de botella del hardware
y del sistema operativo
Prestaremos atencion a los siguientes aspectos
Seleccion de CPU
Equilibrar recursos de memoria y disco
Elegir discos (RAID, NAS)
Configuracion de red
Introduccion
Cuellos de botella comunes:
Saturacion de CPU. Comun cuando MySQL trabaja con datos que
caben en memoria o pueden ser ledos de disco tan rapido como sea
necesario. Ejemplos: ops. criptograficas intensivas, combinaciones sin
ndices
Saturacion E/S. Se trabaja con mas datos de los que caben en
memoria. Se vaca cache para traer mas datos, y al rato los datos
vaciados se tienen que volver a cargar
Posibles errores de interpretacion:
Escasez de memoria se puede interpretar como falta de capacidad
E/S
Bus de memoria saturado se puede interpretar como problema de la
CPU
Seleccion de la CPU
CPU rapida o muchas CPUs no tan rapidas?
MySQL aprovecha mal el paralelismo ya que asigna una operacion a
una CPU. Problemas de escala con muchas CPU
En funcion del tipos de rendimiento deseable:
Baja latencia
Tiempo de respuesta rapido para cada consulta.
Mejor CPUs rapidas porque cada peticion solo aprovecha una CPU.
Alto rendimiento:
Muchas peticiones simultaneas.
Mejor muchas CPUs, pero como MySQL escala mal no funciona el
cuantas mas mejor.
Al final: meter mas CPUs hasta que deje de compensar y llegados a
ese punto: intentar que sean lo mas rapidas posible.
Seleccion de la CPU
Cuando compensan muchas CPUs?
MySQL puede aprovechar CPUs secundarias para tareas en segundo
plano (ops. de red, limpieza de buferes InnoDB)
Esas tareas son menores en comparacion con la ejecucion de
peticiones de los usuarios
Muchas CPUs compensan realmente si:
Muchas conexiones que acceden a tablas diferentes (no compiten por
bloqueos)
Rendimiento total del servidor mas importante que el tiempo de
respuesta de una peticion particular
Seleccion de discos
Factores a tener en cuenta:
Capacidad de almacenamiento
No suele ser un problema (tamano actual de los discos mas que
suficiente)
Practica estandar: combinar discos pequenos y RAID
Ventajoso tener mas capacidad de la necesaria: aumenta la localidad
de los datos
Velocidad de transferencia: no suele ser un factor que limite las
aplicaciones online
Tiempo de acceso: es el factor determinante para agilizar busquedas
aleatorias
Tamano fsico: discos mas pequenos son mas rapidos y ocupan
menos (fsicamente)
El aprovechamiento depende del motor. InnoDB escala bien entre 10
y 20 discos
Seleccion de discos
Seleccion de RAID
Seleccion de discos
Multiples volumenes Donde colocamos los archivos?
Archivos de datos e ndice
Archivos de registros transaccionales
Archivos de registros binarios
Archivos de registro general (registros de errores, registro de
peticiones, registro de consultas lentas, . . . )
Archivos y tablas temporales
Por defecto, todos los archivos en un unico directorio
InnoDB:
datos e ndices en un unico conjunto de archivos
Solo los archivos de definicion de tablas van aparte, en el directorio
de cada base de datos
Seleccion de discos
Multiples volumenes
Usar multiples volumenes puede ayudarnos a gestionar E/S pesada
Regla clasica: registros transaccionales y archivos de datos en
volumenes diferentes
E/S secuencial de tx. no interfiere con E/S aleatoria de datos
En realidad, no es tal ventaja
Escrituras en registro son pequenas
Caches RAID agrupan escrituras: se convierten en muchas menos
escrituras por segundo
No interfieren con E/S de datos
Ventaja real:
En caso de fallo, mucho mas seguro tenerlos separados
Si se pierden los datos: se pueden recuperar usando el registro
Recuperacion point-in-time
Seleccion de discos
Dedicar discos a registros transaccionales depende del coste, no del
rendimiento
Ejemplo:
4 discos duros: 2 para datos, 2 para registros transaccionales
1/2 del disco perdido para datos
1 disco para un trabajo trivial (la cache del disco hace todo el trabajo)
10 discos duros: 2 para datos, 2 para registros transaccionales
Proporcionalmente menos caro
Configuracion tpica:
SO, swap y registros binarios en RAID 1
Resto: un unico volumen en RAID 5 o RAID 10
Configuracion de red
El mayor problema es la latencia
En una aplicacion tpica hay muchas transferencias pequenas y se
suman los retrasos de cada transmision
La causa principal es la perdida de paquetes, 1 % de perdida produce
degradacion significativa
Optimizaciones:
Pocas conexiones, peticiones o resultados grandes: aumentar el
tamano del buffer TCP
Aumenta el numero de paquetes que se pueden mandar de una
tacada
Modificable en origen y destino
Solo conexiones locales: acortar timeout de cierre de conexion (por
defecto, un minuto)
Otras: Eliminar latencia resolucion DNS: skip name resolve
Contenidos
1 Introduccion a MySQL
2 Replicacion
3 Copia de seguridad y recuperacion
4 Medicion de rendimiento y perfilado
Medicion del rendimiento
Perfilado de aplicaciones
5 Optimizacion
Optimizacion de esquemas e ndices
Optimizacion de hw. y sw.
Optimizacion del servidor
Introduccion
No existe el archivo de configuracion optimo.
Cada servidor necesita una configuracion diferente, dependiendo de:
hardware
tamano datos,
tipos de consultas
Requisitos del sistema (tiempo de respuesta, duracion tx,
consistencia, . . . )
La configuracion de MySQL predeterminada esta pensada para no
utilizar muchos recursos.
No da por hecho maquina dedicada.
Reserva recursos suficientes para iniciar MySQL y ejecutar consultas
sobre pocos datos
Para definir configuracion a medida:
Partir de alguno de los ficheros de configuracion de ejemplo.
No esperar muchas mejoras con cada cambio
Inicialmente, cambios que duplican o triplican rendimiento
Despues, mejoras incrementales
Enxenara Informatica Miguel R. Luaces (luaces@udc.es) - Juan Ramon Lopez Rodrguez
BD3: Diseno Fsico - MySQL
Optimizacion
Optimizacion del servidor
Introduccion
La configuracion permanente MySQL se almacena fichero my.cnf
Se configura mediante la asignacion de valores a variables
Es posible ejecutar multiples instancias desde una sola configuracion
con secciones independientes.
Ambitos de las variables:
Global (se aplican al servidor y a cada conexion)
Sesion (se aplican a una conexion especfica)
Especficas para un objeto
Valores demasiado altos generan problemas (i.e. quedarnos sin
memoria)
Introduccion
El proceso debe ser el siguiente:
Preparar y realizar mediciones de prueba antes de empezar a ajustar
servidor
Pruebas que representen carga de trabajo real
Incluir consultas complejas
Definir un sistema de supervision para medir si cambio mejora o
empeora rendimiento
Cambiar una o dos variables, un poco, cada vez, y hacer prueba de
medicion
Ajustar hasta que todo funciona bastante bien
No insistir a menos que creamos que podemos obtener mejora
significativa (el esfuerzo no compensa)
Los acantilados son tpicos: incrementamos variable un poco y
mejora rendimiento; la incrementamos un poco mas, y el
rendimiento cae en picado
Introduccion
No comenzar a ajustar configuracion sin un esquema y consultas
estables
Todos los ndices creados
Si modificamos esquema despues de ajustar configuracion: volver a
empezar
Describiremos estos aspectos
Ajuste de uso de memoria
Ajustes de caches
Ajustes E/S
Concurrencia
100-
((key_blocks_unused*key_cache_block_size)*100/key_buffer_size)
% de aciertos:
100-((key_reads*100)/key_read_requests)
Fallos por segundo:
key_reads/uptime
El % aciertos es el menos significativo porque depende mucho de la
aplicacion
El numero de fallos por segundo es el mas significativo
El % buffer en uso permite conocer si hemos reservado demasiado
espacio
Aunque no se usen tablas MyISAM hay que reservar espacio a la
cache porque MySQL las usa para ciertas operaciones
Enxenara Informatica Miguel R. Luaces (luaces@udc.es) - Juan Ramon Lopez Rodrguez
BD3: Diseno Fsico - MySQL
Optimizacion
Optimizacion del servidor
Cache de subprocesos
Pool de procesos libres preparada para conexiones nuevas
Entra conexion: se le asigna proceso de la cache
Conexion se cierra: proceso vuelve a estar disponible en la cache
Si no hay sitio: el proceso se destruye
Numero maximo de subprocesos en cache: thread_cache_size
Monitorizacion:
Intentar mantener threads_created entre 1-10 por segundo
Revisar threads_connected para configurar el tamano de la cache
de forma que sea capaz de contener la fluctuacion tpica de la carga
de trabajo
Concurrencia
InnoDB antes de MySQL 5.1 responde mal a situaciones de alta
concurrencia
Unica solucion: limitar concurrencia
(innodb_thread_concurrency)
Formula util (en la practica, puede ser mejor usar valor mas
pequeno):
concurrencia = num CPUs * num discos * 2
Antes, InnoDB tena muchos semaforos MUTEX
Ahora la concurrencia es mucho mejor en InnoDB, pero la mejora de
la cache de threads quedo la rama abandonada de MySQL 6.0 y se
ha recuperado en MariaDB
Miguel R. Luaces
Laboratorio de Bases de Datos
Universidade da Coruna