systemadmin.es > DBA > InnoDB: ERROR: the age of the last checkpoint is 9433961

InnoDB: ERROR: the age of the last checkpoint is 9433961

En bases de datos MySQL con mucha actividad o que tratan con datos muy grandes sobre tablas InnoDB nos podemos encontrar con mensajes simulares a:

110221  1:28:31  InnoDB: ERROR: the age of the last checkpoint is 9433961,
InnoDB: which exceeds the log group capacity 9433498.
InnoDB: If you are using big BLOB or TEXT rows, you must set the
InnoDB: combined size of log files at least 10 times bigger than the
InnoDB: largest such row.

El mensaje se refiere el redo log, son los ficheros llamados ib_logfile0 y ib_logfile1 que podemos encontrar en el datadir del MySQL. En estos ficheros se almacenan los cambios sobre tablas InnoDB para que, en caso de un crash de MySQL se ejecuten para completar las transacciones.

La variable que controla el tamaño de dichos ficheros es innodb_log_file_size, deberemos tener en cuenta que si aumentamos el tamaño podemos ahorrar actividad en el buffer pool, pero a costa de aumentar el tiempo de recuperación si hay un crash (ya que se deberán leer dichos ficheros)

Para planificar ficho fichero podemos estimar los datos que se escriben mediante la variable de estado Innodb_os_log_written, repitiendo la querie separada por, por ejemplo, un minuto:

mysql> show global status like 'Innodb_os_log_written'; select sleep(60); show global status like 'Innodb_os_log_written';
+-----------------------+---------------+
| Variable_name         | Value         |
+-----------------------+---------------+
| Innodb_os_log_written | 1140196470272 |
+-----------------------+---------------+
1 row in set (0.00 sec)

+-----------+
| sleep(60) |
+-----------+
|         0 |
+-----------+
1 row in set (1 min 0.00 sec)

+-----------------------+---------------+
| Variable_name         | Value         |
+-----------------------+---------------+
| Innodb_os_log_written | 1140196718080 |
+-----------------------+---------------+
1 row in set (0.00 sec)

A partir de estos datos, podemos calcular la cantidad de datos que se almacenarán, y por lo tanto, el tiempo que tarda a rotar el log.

Para el caso del error anterior, nos esta diciendo que desde el último checkpoint se han modificado más datos de los que caben el el redo log. Por lo tanto, deberemos ampliarlo adecuadamente.

Para modificar el tamaño, deberemos hacer primero una parada del MySQL, para luego modificar el valor. Es importante que la parada se haga correctamente para que no haya cambios pendientes de aplicar en los redo logs:

innodb_log_file_size=10485760

Veremos el los ficheros originales tienen de tamaño del valor de la variable innodb_log_file_size, en este caso el por defecto:

# ls -la /var/mysql/ib_logfile* -la
-rw-rw---- 1 mysql mysql 5242880 Feb 24 06:00 /var/ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 Feb 24 06:00 /var/ib_logfile1

A continuación deberemos eliminar los ficheros (o moverlos a otra parte):

mv ib_logfile* ..

Y deberemos volver a arrancar el MySQL, al no encontrar los ficheros ib_logfile, los volverá a crear:

110224  7:59:27  InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 10 MB
InnoDB: Database physically writes the file full: wait...
110224  7:59:27  InnoDB: Log file ./ib_logfile1 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile1 size to 10 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
110224  7:59:28  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Last MySQL binlog file position 0 506047704, file name /var/binlog/mysql-bin.001073

Veremos que el valor será el de la variable innodb_log_file_size que hemos modificado:

# ls -la /var/mysql/ib_logfile* -la
-rw-rw----  1 mysql mysql   10485760 Feb 24 08:26 ib_logfile0
-rw-rw----  1 mysql mysql   10485760 Feb 24 08:27 ib_logfile1

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>