Las siglas MGA significan Multi Generational Architecture o en castellano Arquitectura de Múltiple Generación. Se refieren al método que utiliza Firebird para evitar bloquear los registros que están siendo actualizados o borrados, sin necesidad de estar anotando dichas operaciones. Además MGA permite recuperar rápidamente las versiones anteriores de esos registros en caso de detectarse algún error, una falla del hardware, o del software, o si el usuario cambió de opinión.

Otro nombre con el que se le conoce a MGA es MVCC (Multi Version Concurrency Control) o en castellano control de concurrencia de múltiples versiones.

MGA impide que dos o más usuarios cambien o borren el mismo registro al mismo tiempo.

¿Cómo funciona MGA?

Proveyéndole a cada usuario de una “instantánea” de la Base de Datos y cada usuario solamente puede ver y cambiar la “instantánea” que recibió. Eso implica que cualquier cambio que haga a los datos (cualquier inserción, modificación o borrado) no será visto por los demás usuarios hasta que realice un COMMIT exitoso.

¿Cómo se implementa MGA?

A través de versiones del registro.

Esto es mucho mejor que otros métodos. Por ejemplo en las tablas .DBF que utilizan dBase, Clipper, FoxPro, Visual FoxPro y otros lenguajes, cuando un usuario graba la modificación a un registro esa modificación se graba en la tabla .DBF correspondiente y el contenido anterior de ese registro se pierde para siempre.

Firebird lo hace de forma diferente. Cuando un usuario quiere modificar un registro, se crea una nueva versión del mismo el cual contiene las diferencias con el registro original. Cuando un usuario quiere borrar un registro también se crea un nuevo registro el cual tiene una bandera (o sea, una marca) que indica que debe ser borrado.

Por lo tanto, si es necesario, se puede restaurar un registro a su versión original.

¿Por qué? Porque el registro original no es eliminado.

Esto implica que si varios usuarios están modificando el mismo registro entonces hay varias versiones de ese registro.

Como hay varias versiones del registro que está siendo modificado esto le permite al Firebird conocer la versión original del registro hasta que se hace un COMMIT, un ROLLBACK o el Servidor es reiniciado. Cuando el Servidor se reinicia hace un ROLLBACK de todas las transacciones activas. Una transacción es activa hasta que se realiza un COMMIT exitoso o un ROLLBACK en ella.

¿Qué implica usar MGA?

  • Que el comando UPDATE crea una versión del registro
  • Que el comando DELETE crea una versión del registro
  • Que esas versiones del registro son guardadas al menos hasta que se realiza un COMMIT o un ROLLBACK
  • Que si no se ejecutó ni un COMMIT ni un ROLLBACK las versiones del registro nunca son eliminadas, permanecerán en la Base de Datos indefinidamente o hasta que se reinicie el Servidor
  • Que si hay muchas transacciones que no finalizaron ni con COMMIT ni con ROLLBACK entonces habrá muchas versiones antiguas de los registros y eso hará que las operaciones que impliquen a esos registros se vuelvan cada vez más lentas

¿Cuáles son las tareas del Administrador?

  1. Revisar las estadísticas de la Base de Datos para ver si hay transacciones que están activas por mucho tiempo. En general, en una red local si una transacción está activa por más de 10 segundos entonces ya está tardando demasiado. Si la conexión se realizó mediante Internet se considera “mucho tiempo” cuando supera los 10 minutos.
  2. Eliminar las transacciones que están activas por mucho tiempo porque ellas les pueden impedir a las nuevas transacciones realizar un COMMIT.
  3. Descubrir si algún programa, algún módulo de un programa o algún usuario, mantiene las transacciones activas durante mucho tiempo.
  4. Asegurarse que todos los desarrolladores escriban transacciones cortas y que todas las transacciones, sin excepción, finalicen siempre con un COMMIT o con un ROLLBACK.

 

 

 

Anuncios