Una situación común en una aplicación de bases de datos es que la clave primaria sea un identificador único y las nuevas filas se inserten en el orden ascendente de esta clave. Por lo tanto, las inserciones en el índice agrupado no necesitan lecturas del disco aleatorias.
Por el otro lado, los índices secundarios generalmente no son únicos, y
las inserciones en los mismos ocurren en un orden relativamente
aleatorio. Esto podría ocasionar gran cantidad de operaciones de E/S en
disco, de no ser por un mecanismo especial utilizado en
InnoDB.
Si una entrada de índice debiera insertarse en un índice secundario no
único, InnoDB verifica si la página del índice
secundario se encuentra en el pool de buffer. Si ese es el caso,
InnoDB realizará la inserción directamente en la
página de índice. Si dicha página no se encuentra en el pool de buffer,
InnoDB insertará la entrada en una estructura de
buffer de inserciones especial. El buffer de inserciones se mantiene tan
pequeño que cabe completamente en el pool de buffer, y las inserciones
pueden hacerse muy rápidamente.
Periódicamente, el buffer de inserciones se integra a los árboles de índices secundarios de la base de datos. A menudo es posible integrar varias inserciones en la misma página del árbol de índices, ahorrando operaciones de E/S en disco. Se ha comprobado que el buffer de inserciones puede acelerar hasta 15 veces las inserciones en una tabla.
La integración del buffer de inserciones puede continuar luego de que la transacción que realiza la inserción ha sido confirmada. De hecho, puede continuar despues de que el servidor ha sido detenido y vuelto a iniciar (consulte Sección 15.8.1, “Forzar una recuperación”).
La integración del buffer de inserciones puede tomar muchas horas, cuando hay varios índices secundarios para actualizar y gran cantidad de filas insertadas. Durante este tiempo, las operaciones de E/S en disco se incrementan, lo cual puede lentificar significativamente las consultas sobre el disco. Otra operación de E/S de importancia que se produce en segundo plano es el subproceso de depuración (Consulte Sección 15.12, “Implementación de multiversión”).
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.
