Debido a que InnoDB es una base de datos con
      multiversión, debe llevar información acerca de las versiones
      anteriores de una fila en el espacio de tablas. Esta información
      se almacena en una estructura de datos llamada Rollback Segment
      (Segmento de Cancelación) al igual que una estructura de datos
      análoga de Oracle.
    
      Internamente, InnoDB agrega dos campos a cada
      fila almacenada en la base de datos. Un campo de 6 bytes indica el
      identificador de la última transacción que insertó o actualizó
      la fila. Además, una eliminación se trata internamente como una
      actualización en la que un bit especial en la fila se establece a
      un valor que la señala como eliminada. Cada registro también
      contiene un campo de 7 bytes llamado "roll pointer" que apunta a
      una entrada del registro (log) de cancelación de modificaciones
      (undo) grabado en el segmento de cancelación (RollBack Segment).
      Si la fila fue actualizada, la entrada en el registro de
      cancelación de modificaciones (undo log) contiene la información
      necesaria para recrear el contenido de la fila tal como estaba
      antes de actualizarse.
    
      InnoDB utiliza la información en el segmento
      de cancelación para deshacer los cambios durante la cancelación
      de una transacción. También la emplea para generar versiones
      anteriores de una fila en una lectura consistente.
    
      Los registros de cancelación de modificaciones en el segmento de
      cancelación se dividen entre originados por inserciones (insert
      undo logs) y actualizaciones (update undo logs). Los insert undo
      logs se necesitan solamente para la cancelación de transacciones
      y se descartan tan pronto como se confirma la transacción. Los
      update undo logs se emplean también para lecturas consistentes, y
      pueden descartarse solamente cuando no quedan transacciones
      integrando una captura tomada por InnoDB, que
      en una lectura consistente podría necesitar esta información
      para reconstruir versiones anteriores de una fila.
    
      Se deben confirmar las transacciones regularmente, incluyendo
      aquellas que solamente realizan lecturas consistentes. De otro
      modo, InnoDB no podrá descartar datos de los
      update undo logs, y el segmento de cancelación puede crecer en
      demasía, llenando el espacio de tablas.
    
El tamaño físico de una entrada en el registro de cancelación de cambios en el segmento de cancelación es generalmente menor que el de la correspondiente fila insertada o actualizada. Se puede emplear esta información para calcular el espacio necesario para el segmento de cancelación.
      En el esquema de multiversión de InnoDB, una
      fila no es quitada inmediatamente de la base de datos cuando se la
      elimina mediante una sentencia SQL. Sólo cuando
      InnoDB pueda descartar la entrada en el
      registro de cancelación de modificaciones creada para la
      eliminación, procederá a quitar físicamente de la base de datos
      la fila y sus entradas en los índices. Esta operación se llama
      depuración (purge) y es bastante rápida, generalmente requiere
      el mismo tiempo que la sentencia SQL que realizó la eliminación.
    
      En un escenario donde el usuario inserte y elimine filas
      aproximadamente en la misma proporción y en pequeños lotes, es
      posible que el subproceso de depuración comience a sufrir
      retrasos y la tabla crezca contínuamente, haciendo muy lenta
      cualquier operación que se realice sobre el disco. Incluso si una
      tabla contuviera sólo 10 MB de datos útiles, puede crecer hasta
      ocupar 10 GB con las filas “muertas”. En tal caso
      podría ser bueno limitar las operaciones de filas nuevas y
      asignar más recursos al subproceso de depuración. La opción de
      inicio (y también variable global configurable)
      innodb_max_purge_lag existe precisamente para
      este propósito. Consulte Sección 15.4, “Opciones de arranque de InnoDB”
      para más informació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.

