Está en la página 1de 32

TRANSACCIONES

Y
CONTROL DE
CONCURRENCIA

JULIO CESAR ROMANI LOYOLA


VLADIMIR ORTIZ VELASQUEZ
Control de concurrencia
La Concurrencia en las base de
datos es de suprema importancia
en los sistemas de información,
ya que evita errores en el
momento de ejecutar las
diferentes transacciones
Control de concurrencia
En si la concurrencia es la
propiedad de los sistemas que
permiten que múltiples procesos
sean ejecutados al mismo tiempo,
y que potencialmente puedan
interactuar entre sí
Que es una transacción?
• Definición
Una transacción es una unidad de programa
que accesa y posiblemente actualiza varios
elementos de datos.
Es decir : cada transacción accede a
información compartida sin interferir con
otras transacciones, y si una transacción
termina normalmente, todos sus efectos son
permanentes, en caso contrario no tiene
afecto alguno.
Propiedades de la
transacción
• Atomicidad
Se refiere al hecho de que una transacción
se trata como una unidad de operación.
Por lo tanto, o todas las acciones de la
transacción se realizan o ninguna de ellas se
lleva a cabo. La atomicidad requiere que si
una transacción se interrumpe por una falla,
sus resultados parciales sean anulados.
Propiedades de la
transacción
• Consistencia
La consistencia de una transacción es
simplemente su correctitud. En otras
palabras, una transacción es un programa
correcto que lleva a la base de datos de un
estado consistente a otro con la misma
característica. Debido a esto, las
transacciones no violan las restricciones de
integridad de una base de datos.
Propiedades de la
transacción
• Aislamiento

Una transacción en ejecución no puede


revelar sus resultados a otras transacciones
concurrentes antes de finalizar.
Más aún, si varias transacciones se ejecutan
concurrentemente, los resultados deben ser
los mismos que si ellas se hubieran
ejecutado de manera secuencial.
Propiedades de la
transacción
• Permanencia

Es la propiedad de las transacciones que


asegura que una vez que una transacción
finaliza exitosamente, sus resultados son
permanentes y no pueden ser borrados
de la base de datos por alguna falla
posterior.
Propiedades de la
transacción
• Por lo tanto, los sistemas manejadores de
base de datos aseguran que los
resultados de una transacción
sobrevivirán a fallas del sistema. Esta
propiedad motiva el aspecto de
recuperación de base de datos, el cual
trata sobre como recuperar la base de
datos a un estado consistente donde
todas las acciones que han finalizado con
éxito queden reflejadas en la base.
TRANSACCIÓN
El procesamiento de transacciones es una
de las tareas más importantes dentro de
un sistema de base de datos, pero a la
vez, es una de las más difíciles de
manejar debido a diversos aspectos, tales
como :

• Confiabilidad Puesto que los sistemas de


base de datos en línea no pueden fallar.
TRANSACCIÓN
• Disponibilidad Debido a que los sistemas
de base de datos en línea deben estar
actualizados correctamente todo el
tiempo.
• Tiempos de Respuesta En sistemas de
este tipo, el tiempo de respuesta de las
transacciones no debe ser mayor a doce
segundos.
TRANSACCIÓN
• Throughput Los sistemas de base de datos
en línea requieren procesar miles de
transacciones por segundo.
• Atomicidad En el procesamiento de
transacciones no se aceptan resultados
parciales.
• Permanencia No se permite la eliminación
en la base de datos de los efectos de una
transacción que ha culminado con éxito.
TRANSACCIÓN
El punto importante es asegurar que la base de datos
regresa a un estado consistente al fin de la ejecución de
una transacción
TRANSACCIÓN
TRANSACCIÓN
• En esencia, lo que se persigue con el
procesamiento de transacciones es, por
una parte obtener una transparencia
adecuada de las acciones concurrentes a
una base de datos y por otra parte
manejar adecuadamente las fallas que se
puedan presentar en una base de datos.
TRANSACCIÓN
• Un SGBD se dice transaccional si es
capaz de mantener la integridad de los
datos, haciendo que estas transacciones
no puedan finalizar en un estado
intermedio. Cuando por alguna causa el
sistema debe cancelar la transacción,
empieza a deshacer las ordenes
ejecutadas hasta dejar la base de datos
en su estado inicial (llamado punto de
integridad), como si la orden de la
TRANSACCIÓN

Acciones que deben constituir una


transacción
• BEGIN TRAN: Especifica que va a
empezar una transacción.
• COMMIT TRAN: Le indica al motor que
puede considerar la transacción
completada con éxito.
• ROLLBACK TRAN: Indica que se ha
alcanzado un fallo y que debe restablecer
la base al punto de integridad.
TRANSACCIÓN
REGISTRO DE TRANSACCIONES

Un DBMS utiliza un registro de transacciones para dar


seguimiento a todas las transacciones que actualizan
la base de datos. La información guardada en este
registro es utilizada por el DBMS para un requerimiento
de recuperación activo por una sentencia ROLLBACK.

Oracle de manera automática deshace las


transacciones no comprometidas y continúa con las
transacciones que estaban comprometidas pero aún no
escritas en la base de datos física.
TRANSACCIÓN
Mientras que el DBMS ejecuta transacciones que modifican la
base de datos, también actualiza automáticamente el
registro de transacciones. El registro de transacciones
guarda:
 Un registro de inicio de la transacción.
 Por cada componente de transacción(sentencia SQL) guarda:
 El tipo de operación que se este realizando(actualización, eliminación,
inserción).
 Los nombres de los objetos afectados por la transacción(el nombre de la
tabla).
 Los valores “antes” y “después” de los campos que se están
actualizando.
 Sañalizadores a los ingresos de registro de transacción previo y siguiente
para la misma transacción.
 Un registro de inicio de la transacción.

 La finalización (COMMIT) de la transacción.


TRANSACCIÓN
REGISTRO DE TRANSACCIONES
TRANSACCIÓN
EJEMPLO
Un ejemplo habitual de transacción es el traspaso de una
cantidad de dinero entre cuentas bancarias.
Normalmente se realiza mediante dos operaciones
distintas, una en la que se decrementa el saldo de la
cuenta origen y otra en la que incrementamos el saldo de
la cuenta destino. Para garantizar la consistencia del
sistema (es decir, para que no aparezca o desaparezca
dinero), los dos operaciones deben ser atómicas, es
decir, el sistema debe garantizar que, bajo cualquier
circunstancia (incluso una caída del sistema), el
resultado final es que, o bien se han realizado las dos
operaciones, o bien no se ha realizado ninguna
TRANSACCIÓN
• La forma algorítmica que suelen tener las transacciones es la siguiente:

Crear Conexión
Abrir Conexión
(Openconnection)
Iniciar Transacción
(Begin Transaction) setAutoCommit(0/false)
Queries...
(Insert, Select, Update, Delete...)
-Error
(Abort Transaction) rollback
Procesar resultados
(Print, a= , b= )
Asegurar Transacción
(End Transaction) commit
Cerrar Conexión
(Closeconnection)
NIVELES DE AISLAMIENTO
• Las transacciones especifican un nivel de aislamiento que define el grado en que se
debe aislar una transacción de las modificaciones de recursos o datos realizadas por
otras transacciones. Los niveles de aislamiento se describen en cuanto a los efectos
secundarios de la simultaneidad que se permiten, como las lecturas no confirmadas
o las lecturas ficticias.

Los niveles de aislamiento de transacción controlan los siguientes aspectos:

• Si se realizan bloqueos cuando se leen los datos y qué tipos de bloqueos se


solicitan.

• La duración de los bloqueos de lectura.

• Si una operación de lectura que hace referencia a filas modificadas por otra
transacción:

– Se bloquea hasta que se libera el bloqueo exclusivo de la fila.

– Recupera la versión confirmada de la fila que existía en el momento en el que


empezó la instrucción o la transacción.

– Lee la modificación de los datos no confirmados.


NIVELES DE AISLAMIENTO
• READ COMMITED (Lectura de confirmadas)
Adquiere un bloqueo compartido mientras incluye
una fila en un cursor pero libera el bloqueo
inmediatamente después de leer la fila.

• READ UNCOMMITED (Lectura de no confirmadas)


No solicita bloqueos mientras incluye una fila en
un cursor y no respeta ningún bloqueo exclusivo.
Se pueden llenar los cursores con valores que ya
se han actualizado pero que aún no se han
confirmado.
NIVELES DE AISLAMIENTO
• REPEATABLE READ (Lectura
repetible) o SERIALIZABLE
Solicita un bloqueo compartido en
cada fila a medida que la incluye en
el cursor, como en READ
COMMITTED, pero si el cursor se abre
dentro de una transacción, se
mantienen los bloqueos compartidos
hasta el final de la transacción en
lugar de liberarse tras leer la fila.
NIVELES DE AISLAMIENTO
• SNAPSHOT (Instantánea)
No solicita bloqueos mientras incluye una
fila en un cursor y no respeta ningún
bloqueo exclusivo. El cursor se llena con
los valores a partir del momento en que
se inicia por primera vez la transacción.
Se siguen solicitando bloqueos de
desplazamiento, con independencia del
uso de aislamiento de instantánea.
NIVELES DE AISLAMIENTO
SQL estándar define 4 niveles de aislamiento en
términos de 3 fenómenos que deben ser prevenidos
entre transacción concurrentes. Estos son:

• DIRTY READ: Una transacción lee datos escritos por


una transacción concurrente que no ha hecho
"commit"
• NONREPEATABLE READ: Una transacción re-lee
datos que leyó previamente y encuentra que han sido
modificados por otra transacción (que hizo commit en
el inter).
• PHANTOM READ: Una transacción re-ejecuta un
query regresando un conjunto de tuplas que
satisfacen una condición de búsqueda y encuentra
que el resultado ha cambiado debido a otra
transacción que hizo "commit" recientemente.
NIVELES DE BLOQUEO
• BLOQUEOS COMPARTIDOS

Los bloqueos compartidos permiten que varias


transacciones simultáneas lean (SELECT) un recurso
en situaciones de control de simultaneidad pesimista.
Ninguna otra transacción podrá modificar los datos
mientras el bloqueo compartido exista en el recurso.
Los bloqueos compartidos en un recurso se liberan
tan pronto como finaliza la operación de lectura, a
menos que se haya establecido el nivel de aislamiento
de la transacción como REPEATABLE READ o más
alto, o bien se utilice una sugerencia de bloqueo para
mantener los bloqueos compartidos durante la
transacción.
NIVELES DE BLOQUEO
• BLOQUEOS EXCLUSIVOS

Los bloqueos exclusivos evitan que transacciones simultáneas


tengan acceso a un recurso. Al utilizar un bloqueo exclusivo, el resto
de las transacciones no pueden modificar los datos; las operaciones
de lectura sólo se pueden realizar si se utiliza la sugerencia
NOLOCK o el nivel de aislamiento de lectura no confirmada.
Las instrucciones para modificar datos, como INSERT, UPDATE y
DELETE combinan las operaciones de modificación con las de
lectura. En primer lugar, la instrucción lleva a cabo operaciones de
lectura para adquirir los datos antes de proceder a ejecutar las
operaciones de modificación necesarias. Por tanto, las instrucciones
de modificación de datos suelen solicitar bloqueos compartidos y
exclusivos. Por ejemplo, una instrucción UPDATE puede modificar
las filas de una tabla a partir de una combinación con otra tabla. En
este caso, la instrucción UPDATE solicita bloqueos compartidos para
la filas leídas en la tabla de combinación, además de bloqueos
exclusivos para las filas actualizadas.
MARCAS DE TIEMPO
• En lugar de determinar el orden entre las
transacciones en conflicto en función del momento
del acceso a los elementos, determinan por
adelantado una ordenación de las transacciones.

• El interbloqueo es imposible.

• Una marca de tiempo es un identificador único


asociado a
• cada transacción

• Las actualizaciones físicas se retrasan hasta la


confirmación
• de las transacciones. No se puede actualizar
ningún
MARCAS DE TIEMPO
• Protocolos:
– Wait-die: que fuerza a una transacción a
esperar en caso de que entre en conflicto
con otra transacción cuya marca de tiempo
sea mas reciente, o a morir (abortar y
reiniciar) si la transacción que se esta
ejecutando es más antigua.
– Wound-wait: que permite a una
transacción matar a otra que posea una
marca de tiempo más reciente, o que
fuerza a la transacción peticionaria a
esperar.
MARCAS DE TIEMPO
• Marcas de tiempo multiversión

– Varias transacciones leen y escriben diferentes


versiones del mismo dato siempre que cada
transacción sea un conjunto consistente de versiones
de todos los datos a los que accede.
• ORACLE utiliza un sistema multiversión
• Protocolo:
– Esta basado en marcas de tiempo
– El control de concurrencia es de varias versiones a
la vez de un item de datos.
– Cuando una transacción requiere acceder a un item,
la marca de tiempo de la transacción es comparada
con las marcas de tiempo de las diferentes versiones
del item.