Problemas tradicionales de los bloqueos de transacciones y concurrencia en la multiversion

Visitas: 555  
Tiempo total: 11 días con 13:43:58 hrs  

Resumen de lectura A Quick Survey of MultiVersion Concurrency Algorithms de Dibyendu Majumdar

Esta publicación contiene información sobre los distintos problemas que las bases de datos deben manejar para gestionar correctamente la gran cantidad de transacciones que se realizan en una aplicación.

Problemas con la concurrencia

Lecturas sucias

Consiste cuando una transacción lee la información que está siendo modificada por otra transacción pero que todavía no ha sido finalizada con el comando commit.

Actualizaciones perdidas

Ocurre cuando las actualizaciones que realiza una transacción son eliminadas por otra que contenía la misma información de la primera transacción, por ejemplo cuando el proceso R1 lee la información en el tiempo T1, en T2 el proceso R2 lee la misma información. Si R1 actualiza en T3 esta información se perderá cuando R2 actualice la misma lectura con su información en T4.

Lecturas no repetibles

El problema de las lecturas no repetibles consiste en que se lee un registro en una transacción R1 en T1 mientras otra transacción R2 actualiza el que ha sido leído por R1 en T2, mostrando un diferente resultado cuando R1 vuelve a consultar el mismo registro en T3.

Lecturas fantasmas

Consiste en que dos consultas con un mismo QUERY en una misma transacción devuelven información diferente, esto significa que se realizo una inserción por otra transacción en el intervalo de tiempo entre cada consulta.

Modos de bloqueo

Son formas para evitar los problemas de concurrencia, las bases de datos utilizan dos tipos de bloqueos, los cuales son:

Bloqueos compartidos

Protegen a las lecturas de escrituras y actualizaciones, estos bloqueos son compatibles con otros tipos de bloqueos compartidos pero no con bloqueos exclusivos porque estos deben de esperar hasta que se libere el recurso.

Bloqueos exclusivos

Son los que bloquean y protegen las escrituras de otras transacciones.

Todos los tipos de bloqueos utilizados por los DBMS están divididos en niveles:

Lectura finalizada

Son las lecturas y escrituras que finalizan correctamente, en el caso de una escritura cuando se escribe en disco.

Estabilidad del cursor

Previene las lecturas sucias y protegen los registros en donde se encuentra el cursor hasta que pasa al siguiente registro.

Lectura repetida

Previenen las lecturas no repetidas y son creadas por los bloqueos compartidos para siempre consultar la misma información.

Socialización

Sirven para garantizar la estabilidad de la información consultada, por ejemplo bloquea todos los registros en modo compartido al buscar un registro que empiece con “A” en todos los registros disponibles.

Problemas tradicionales en bloqueo de transacciones

Los principales problemas consisten en el bloqueo de la información, cuando se escribe o actualiza las lecturas deben de esperar a que finalice o se aborte la transacción, de igual manera las escrituras y actualizaciones deben de esperar hasta que las lecturas finalicen.

Introducción a la concurrencia en la multiversion

Resuelven el problema de bloqueos, esto significa que los procesos que actualizan y escriben no deben de esperar al utilizar distintos tipos de versiones en los datos.

Requerimientos de la concurrencia en sistemas de multiversion

Básicamente son la capacidad del DBMS de obtener una determinada versión de un registro y de contar con algoritmos que le ayuden a decidir que versión es válida para el contexto de la transacción.

Retos en la implementación de la multiversion

  1. Las múltiples versiones de la base de datos hace necesaria la necesidad de un mecanismo de limpieza para eliminar las versiones que ya no son necesarias.
  2. El DBMS debe proveer acceso para bloquear versiones.
  3. El DBMS debe evitar la utilización de bloqueos costosos al momento de finalizar una transacción.

Ventajas de la concurrencia en sistemas multiversion

Su principal ventaja es la de contar con múltiples versiones de información y con un sistema de eliminación de basura que evita almacenar los datos que ya no son necesarios, este sistema es utilizado por las bases PostgreSQL y Firebird/Interbase.

La segunda ventaja es la de almacenar las últimas versiones en las implementaciones SVDB, y la explotación de la información de las versiones anteriores utilizando escrituras en el Log.

Concurrencia multiversion en PostgreSQL

PostgreSQL se baso en Postgres y fue desarrollado por un profesor de una universidad de california, este sistema de base de datos utiliza el sistema de multiversion con concurrencia utilizando un recolector de basura. Se puede mencionar que utiliza un sistema de dos fases para bloquear el modelo para permitir a los lectores bloquear a los escritores.

En este sistema de multiversion, las nuevas filas de información almacenadas son escritas y hacen a los punteros de las versiones anteriores mostrar la siguiente dirección y marcándose como una versión que ya ha expirado, esperando a que el recolector de basura los elimine.

Concurrencia multiversion en Oracle

Los sistemas de multiversion en Oracle no utilizan distintas versiones, en vez de esto recrea las versiones anteriores cuando es requerida así también se puede mencionar que los ID de los registros no son números secuenciales si no que apuntan a las direcciones en donde se realizo la inserción, es decir la versión de la inserción.

Una de las características de Oracle es que sus transacciones pueden utilizar el espacio de las operaciones canceladas y abortadas cuando ya no existe el espacio suficiente para almacenar más información.

Referencias

A Quick Survey of MultiVersion Concurrency Algorithms
Dibyendu Majumdar
dibyendy@mazumdar.demon.co.uk


Para recibir boletines de información, por favor escribe tu correo electrónico:

Por favor ingrese un correo electrónico valido.
Registrado correctamente!