Bienvenidos sean a este post, hoy veremos como se pueden distribuir los archivos de log en distintos lugares y/o dispositivos.
Antes de comenzar vamos a comentar que InnoDB posee dos logs para trabajar:
- Log undo
- Log redo
Si bien los hemos mencionado en este post para la reparacion de tablas de tipo InnoDB hoy hablaremos un poco mas a fondo, el primer log nos sirve para volver atras todas las transacciones si ocurre alguna falla o por alguna razon quedan incompletas, los cambios en los datos se hacen en los datos en si (en el cache o en el disco) no en copias separadas, por lo tanto si debemos volver para atras los datos que se modificaron deben volver a su estado previo, tambien conocido como rollback, este log contiene una copia de la informacion original y la informacion necesaria para restaurarla, cuando hablamos de caches mencionamos que todas las modificaciones se escriben en la pool de buffers, las paginas escritas en memoria se llaman paginas sucias y a su vez necesitan ser descargadas al disco para hacer los cambios permanentes.
Sin embargo, si antes de descargar estas modificaciones ocurre algun problema, por ejemplo que se «cuelgue» el servidor o se reinicie sin motivo aparente o simplemente falle la electricidad, InnoDB debe proteger los datos de accidentes similares, para hacer esto se escribe temporalmente las modificaciones dentro del log redo en el disco, si algun inconveniente ocurre cuando se reinicia mariadb, InnoDB procede a ejecutar nuevamente todas las transacciones almacenadas en el log redo, estos logs se deben escribir regularmente en un dispositivo de almacenamiento inclusive las transacciones de larga ejecucion aunque lleve a logs de transacciones largos, esta es una razon por lo cual es una buena idea almacenarlos en un dispositivo separado por lo tanto esto genera que en ambos logs tenemos escrituras no secuenciales y si queremos tener una buena performance lo ideal seria almacenarlos en discos SSD o los mas rapidos disponibles.
Comencemos hablando sobre el log undo, de manera predeterminada esta escrito en el espacio de tabla del sistema, el directorio data de InnoDB, ahora si nosotros queremos almacenarlo en otro path o inclusive otro dispositivo se debe establecer las siguientes variables:
- @@innodb_undo_directory, determinamos donde se creara el archivo de log
- @@innodb_undo_tablespaces, representa la cantidad de espacio de tablas (archivos) en cuales se escribiran al log.
Esta ultima variable tiene un valor predeterminado que es 0, la cual representa al espacio de tabla del sistema, para los otros casos se crean todos los archivos en el path informado en @@innodb_undo_directory, su valor maximo es de 126, ambas variables no son dinamicas por lo tanto debemos establecerlas en el archivo de configuraciones o bien por las opciones de inicio –innodb_undo_directory y –innodb_undo_tablespaces, por temas de performance nos conviene establecer a la variable @@innodb_undo_logs, la cual es dinamica, por si la tabla performance_schema muestra habitualmente un mutex sobre el log undo, incrementar el numero de segmentos por archivo de log sea probablemente una buena idea, su valor maximo es 128.
Nuestro siguiente tema es con el archivo log redo, este log se ve afectado por tres variables:
- @@innodb_log_group_log_dir, es el path donde se almacenan los archivos
- @@innodb_log_files_in_group, es el numero de archivos del log
- @@innodb_log_file_size, define el tamaño de cada archivo
Todas estas variables no son dinamicas, por lo tanto debemos agregarlas en la configuracion, los archivos de este log comienzan con ib_logfile seguidos de un numero progresivo comenzando desde 0, el motor se encarga de llenar el archivo hasta que alcanza su valor maximo establecido en @@innodb_log_file_size, una vez alcanzado este crea un nuevo archivo, una vez que se alcanzo el tamaño maximo del ultimo archivo que puede crear vuelve a reusar el primer archivo, el tamaño maximo total de todos los archivos tienen un limite que es de 512 GB, por esto una buena practica para mantenernos seguros en establecerlo a 500 GB.
De manera predeterminada dos archivos log redo son almacenados en el directorio data de mariadb, ellos se llaman ib_logfile0 e ib_logfile1, cada uno tiene un tamaño maximo de 48 MB, para ir finalizando debes tener en cuenta que no es recomendable cambiar el numero de archivos de log pero si moverlos a otros dispositivos para que los accesos de E/S en el disco principal no sean tan frecuentes.
En resumen, hoy hemos visto como distribuir los archivos de log de InnoDB, para que se hace esto, como nos beneficia, detalle de cada log y cuales son las variables que las afectan, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
