Transacciones

Anuncio
Transacciones
Alumnos:
Jesús Hernández CI:18.020.681
José De Abreu CI: 18 855 500
Agenda
1 Concepto de Transacción
1.1 Consistencia y Aislamiento
1.2 Atomicidad y Durabilidad
2 Transacciones y Planificadores (Schedules)
3 Ejecución concurrente de transacciones
3.1 Motivos para la ejecución concurrente
3.2 Seriabilidad
3.3 Anomalías de ejecución
3.4 Planificación Invocando a transacciones Abortadas
4 Cerraduras (Locks)
4.1 2PL
4.2 Dead-Locks
4.3 Deteccion
4.4 Prevención
4.5 Gestor
4.6 Tablas
1
Transacciones
Concepto
Una transacción es una ejecución de un programa de
usuario, visto por el DBMS como una serie de operaciones
lecturas y escrituras, la cual accede a la base de datos que es
compartida por varios usuarios en forma simultánea. Es una
colección de acciones que hacen transformaciones de los
estados de un sistema preservando la consistencia del mismo.
Una base de datos está en un estado consistente si
obedece todas las restricciones de integridad definidas sobre
ella. Los cambios de estado ocurren debido a actualizaciones,
inserciones, y supresiones de información. Por supuesto, se
quiere asegurar que la base de datos nunca entra en un estado
de inconsistencia. Sin embargo, durante la ejecución de una
transacción, la base de datos puede estar temporalmente en un
estado inconsistente. El punto importante aquí es asegurar que
la base de datos regresa a un estado consistente al fin de la
ejecución de una transacción.
Transacciones
Concepto
Lo que se persigue con el uso de transacciones es por un lado
contar con una transparencia adecuada de las acciones concurrentes a
una base de datos y por el otro tener una transparencia adecuada en el
manejo de las fallas que se pueden presentar en una base de datos.
2
1.1 Consistencia y Aislamiento
Consistencia: Una transacción es un programa
correcto que lleva la base de datos de un estado consistente
a otro con la misma característica. Gracias a esto, las
transacciones no violan las reglas de integridad de una base
de datos.
Aislamiento: Una transacción en ejecución no puede
revelar sus resultados a otras transacciones concurrentes
antes de su commit. 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 (seriabilidad). La seriabilidad consiste en
asegurarse que los cambios siguen un orden adecuado.
1.2 Atomicidad y Durabilidad
Atomicidad: Una transacción es tratada como una
unidad de operación. Por lo tanto todas las acciones de la
transacción se llevan a cabo o ninguna de ellas se realiza
.La atomicidad requiere que si una transacción se
interrumpe por una falla, sus resultados parciales deben ser
deshechos. Se efectúan todas las transacciones, pero en
caso de fallas no se realiza ninguna. Una transacción debe
concluir comprometida o abortada. En el caso del
compromiso se instalan todas las actualizaciones y en el
aborto se descartan todas las actualizaciones.
Durabilidad: Es la propiedad de las transacciones
que asegura que una vez que una transacción realiza su
commit, sus resultados son permanentes y no pueden ser
borrados de la base de datos, se asegura que los resultados
de una transacción sobrevivirán a fallas del sistema.
3
2 Transacciones y Planificadores
Hasta ahora conocemos que una transacción es vista
por el DBMS como una serie, o lista, de acciones las cuales
ejecutan operaciones de lectura y escritura en elementos de
la Base de Datos. También sabemos que una transacción
debe especificar su acción de finalización como commit
(Finalizó exitosamente) o abort (finalizó pero deshizo todas
las acciones llevadas a cabo).
Ahora, una planificación, es una lista de acciones
(lecturas, escrituras, abortos o commit) de un conjunto de
transacciones, y el orden que el cual dos acciones de una
transacción T aparecen en una Planificación debe ser el
mismo orden en el cual aparecen en T. En otras palabras
una Planificación representa una secuencia de ejecución
actual o potencial el cual describe las acciones de las
transacciones así como son vistas por el DBMS.
2 Transacciones y Planificadores
T1
T2
R(A)
W(A)
R(B)
W(B)
Commit
R(C)
W(C)
Una Planificación completa es aquella
que contiene todas las acciones de cada
transacción que aparecen en el.
Si las acciones de diferentes
transacciones no están entrelazadas (las acciones
son ejecutadas de inicio a fin, una por una) la
llamamos una Planificación Serial o Secuencial
Commit
4
3 Ejecución concurrente de
transacciones
Conociendo ahora el concepto de planificación
podemos describir las ejecuciones entrelazadas o
interleaved de transacciones.
El DBMS entrelaza las acciones de diferentes
transacciones para mejor el funcionamiento, en términos de
aumentar el promedio de transacciones completadas en un
tiempo determinado o mejorar los tiempos de respuestas de
las transacciones cortas.
3.1 Motivos para la ejecución
concurrente
Ejecución entrelazada de dos transacciones
T1
T2
R(A)
W(A)
R(B)
W(B)
R(C)
W(C)
Asegurar el aislamiento de las transacciones mientras se permite la ejecución
concurrente es difícil, pero es necesario, hay que mejorar el rendimiento.
5
3.2 Seriabilidad
Una planificación, después de su ejecución debe dejar
la base de datos en un estado consistente. La planificación
debe ser, de alguna forma, equivalente a una planificación
en serie. A esta característica se le denomina seriabilidad.
Dicho de otra forma, la seriabilidad de una planificación
garantiza que la ejecución de esa planificación asegura la
consistencia de la base de datos.
3.3 Anomalías de ejecución
Lectura “sucia”(Planificaciones
recuperables)
Ocurre cuando una transacción modifica una
fila y la segunda transacción lee esa fila antes
de que la primera transacción comprometa el
cambio (termine). Si la primera transacción
retrocede y deshace el cambio, la información
leída por la segunda transacción se vuelve
incorrecta.
6
3.3 Anomalías de ejecución
Lectura no repetible
Ocurren cuando una transacción lee una fila
y una segunda transacción modifica esa fila.
Si la segunda transacción comete ese
cambio, las siguientes lecturas de la primera
transacción producen resultados diferentes
al de la primera lectura.
3.3 Anomalías de ejecución
Problema de la modificación perdida
Surge cuando 2 transacciones o más
acceden a la misma fila y modifican su valor
basándose en el valor original de la misma.
Como cada transacción ignora el resto de las
transacciones, la última modificación
sobrescribe las modificaciones realizadas
por las otras transacciones..
7
3.3 Anomalías de ejecución
Lectura fantasma
Se produce cuando una transacción lee
un conjunto de filas que satisfacen una
condición de búsqueda y después, una
segunda modifica los datos (por medio de
una sentencia insert, update o delete). Si la
primera transacción repite la lectura con las
mismas condiciones de búsqueda, obtiene
un conjunto diferente de filas.
3.4 Planificación Invocando a
transacciones Abortadas
Una transacción siempre termina, aun en la presencia
de fallas. Si una transacción termina de manera exitosa
se dice que la transacción hace un compromiso. Si la
transacción se detiene sin terminar su tarea, se dice que
la transacción aborta.
Cuando la transacción es abortada, puede ser por
distintas razones relacionadas con la naturaleza de la
transacción misma, o por conflicto con otras
transacciones o por fallo de un proceso o computador,
entonces su ejecución es detenida y todas las acciones
ejecutadas hasta el momento son deshechas regresando
a la base de datos al estado antes de su ejecución. A
esta operación también se la conoce como rollback.
8
4. Protocolos basados en
candados
(LOCKS)‫‏‬
Un candado es un mecanismo de control de acceso
concurrente a un dato
Los datos pueden tener candados en dos modos:
• Modo exclusivo (X). El dato puede ser leído y escrito. Un
candado en este modo se solicita con la instrucción lock-X
• Modo compartido (S). El dato solo puede ser leído. Un
candado en este modo se solicita con la instrucción lock-S.
Las peticiones por candados se hacen al manager de
control de concurrencia. La transacción puede
proceder solo después de que una solicitud es
otorgada.
4. Protocolos basados en
candados
(LOCKS)‫‏‬
Un candado es un mecanismo de control de acceso
concurrente a un dato
Los datos pueden tener candados en dos modos:
• Modo exclusivo (X). El dato puede ser leído y escrito. Un
candado en este modo se solicita con la instrucción lock-X
• Modo compartido (S). El dato solo puede ser leído. Un
candado en este modo se solicita con la instrucción lock-S.
Las peticiones por candados se hacen al manager de
control de concurrencia. La transacción puede
proceder solo después de que una solicitud es
otorgada.
9
4. Protocolos basados en
candados
(LOCKS)‫‏‬
Un candado es un mecanismo de control de acceso
concurrente a un dato
Los datos pueden tener candados en dos modos:
• Modo exclusivo (X). El dato puede ser leído y escrito. Un
candado en este modo se solicita con la instrucción lock-X
• Modo compartido (S). El dato solo puede ser leído. Un
candado en este modo se solicita con la instrucción lock-S.
Las peticiones por candados se hacen al manager de
control de concurrencia. La transacción puede
proceder solo después de que una solicitud es
otorgada.
4. Protocolos basados en
candados
(LOCKS)‫‏‬
Un candado es otorgado si
el candado solicitado es
compatible con otros
candados previamente
otorgados
Se pueden tener varios
candados compartidos sobre
un dato, pero sólo un
candado exclusivo
Si un candado no puede ser
concedido, la transacción
que lo solicita debe esperar
a que todos los candados
incompatibles sean liberados
Compartid
o
Exclusivo
Compartid
o
Exclusivo
verdadero
falso
falso
falso
Matriz de compatibilidad de
candados
10
4. Protocolos basados en
candados
(LOCKS)‫‏‬
El poner candados no es
suficiente para garantizar
seriabilidad
Ejemplo: si A se actualiza
después de la lectura de B,
la suma será incorrecta
Un protocolo basado en
candados es un conjunto de
reglas seguidas por todas
las transacciones para
solicitar y liberar candados
T2
lock-S(A);
read (A);
unlock(A);
lock-S(B);
read (B);
unlock(B);
display(A+B)‫‏‬
4.1 Protocolos de candados en 2
fases
(2PL)‫‏‬
Asegura planes serializables
Fase 1: Crecimiento
• Una transacción puede
solicitar/obtener candados
• Una transacción no puede liberar
candados
Fase 2: Encogimiento
• Una transacción puede liberar
candados
• Una transacción no puede obtener
candados
11
4.1 Protocolos de candados en 2
fases
(2PL)‫‏‬
Protocolo de candado en dos fases (2PL):
La importancia de los candados de dos fases es que se ha demostrado de
manera teórica que todos los planificadores generados por algoritmos de
control de concurrencia que obedecen a los candados de dos fases son
serializables.
Abortos en Cascada: Puede suceder si una transacción aborta después de
liberar un candado, otras transacciones que hayan accedido el mismo
elemento de datos aborten también.
Para evitar lo anterior, los despachadores para candados de dos fases
implementan lo que se conoce como los candados estrictos de dos fases
en los cuales se liberan todos los candados cuando la transacción termina
4.2 Problemas de los protocolos
basados en candados: Bloqueo
mutuo (Dead-Lock)‫‏‬
Bloqueo mutuo: dos
transacciones esperan
mutuamente a que la otra
libere un candado
Prevención: una transacción
pone un candado a todos los
datos a los que se refiere
antes de comenzar su
ejecución
Evitar: si una transacción
intenta crear un ciclo,
entonces se echa para atrás
(roll back) esa transacción
T3
T4
lock-X (B)‫‏‬
read (B)‫‏‬
B := B – 50
write (B)
lock-S (A)‫‏‬
read (A)‫‏‬
lock-S (B)‫‏‬
lock-X (A)‫‏‬
12
4.3 Prevención de Bloqueos
Mutuos
Asignar priorodades basadas en marcas de tiempo/espera:
Asumimos que Ti quiere un candado que Tj mantiene cerrado.
Dos politicas son posibles:
esperar-morir: Si Ti tiene prioridad mas alta, Ti espera por Tj;
de otra manera Ti se cancela.
herir-esperar: si Ti tiene prioridad mas alta, Tj se cancela;
de otra manera Ti espera.
Si una transaccion se reinicia, asgurarse de que este posee
su marca de tiempo/espera original.
4.3 Prevención de Bloqueos
Mutuos
Asignar priorodades basadas en marcas de tiempo/espera:
Caracterizticas
-Asegura secuenciabilidad según conflictos
-Asegura que no hay bloqueos (interbloqueos) mortales –deadlocks–
-se puede dar reinicio cíclico (inanición)‫‏‬
-Genera retrocesos en cascada.
13
4.4 Detección de Bloqueos
Mutuos
Los Deadlocks pueden ser descritos como un grafo de espera, que
consiste en un par G = (V,E),
V son los vertices (todas las transacciones en el sistema)
E son los arcos; cada elemento es un par ordenado Ti →Tj.
Problemas de los protocolos
basados en candados: Bloqueo
mutuo (Dead-Lock)‫‏‬
El potencial para el dead-lock existe en la mayoría de los protocolos de fijación. Los
dead-lock son un mal necesario. La espera concurrente (inanición) es tambien
posible si se diseña mal las concurrencias.
Por ejemplo: Una transacción puede esperar un X-lock, mientras que una
secuencia de otras transacciones solicita y se concede una S-lock en el mismo
artículo. La misma transacción es en varias ocasiones rodada atrás (roll back)
debido a los dead-locks.
T1
lock-S(A)
T2
lock-X(A)
wait
T3
T4
T5
lock-S(A)
lock-S(A)
lock-S(A)
14
4.5 Gestor de Cerraduras
Un gestor de cerradura puede ser puesto en ejecución como
proceso separado a el cual las transacciones envíen la cerradura
y abran peticiones
El gestor responde a las solicitudes de bloqueo enviando
mensajes de permiso de bloqueo (o un mensaje pidiendo a la
transaccion que se devuelva en caso de bloqueo muerto)
La transacción espera hasta que se contesta su petición
El encargado de la cerradura mantiene una estructura de
datos llamada “ tabla de la cerradura” para registrar cerraduras
concedidas y peticiones
4.6 Tabla De Bloqueo
−
−
−
−
Los rectangulos negros indican
los bloqueos o cerraduras
concedidas
Los rectangulos blancos
representan peticiones en
espera
Las nuevas peticiones son
eviadas al final de la lista y son
concedidas solo si son
compatible con las anteriores.
Si la transaccion aborta todas la
demas peticiones son
automaticamente eliminadas
15
Tecnicas de cerraduras
Especializadas
Lecturas fantasma
Una transacción vuelve a ejecutar una consulta, devolviendo un
conjunto de filas que satisfacen una condición de búsqueda y
encuentra que otras filas que satisfacen la condición que han sido
insertadas por otra transacción cursada.
Control de Concurrencia sin
locking
Control de concurrencia optimista
Los algoritmos de control de concurrencia discutidos antes son por naturaleza
pesimistas. En otras palabras, ellos asumen que los conflictos entre
transacciones son muy frecuentes y no permiten el acceso a un dato si existe
una transacción conflictiva que acceda al mismo dato.
Así, la ejecución de cualquier operación de una transacción sigue la secuencia
de fases: validación (V), lectura (R), cómputo (C) y escritura (W).
Los algoritmos optimistas, por otra parte, retrasan la fase de validación justo
antes de la fase de escritura. De esta manera, una operación sometida a un
despachador optimista nunca es retrasada.
16
Gestion de transacciones en
SQL:2003
Las sentencias del estandar SQL:2003 que nos permiten trabajar con
transacciones son las siguientes:
START TRANSACTION: Marca el inicio de una transaccion. Permite
establecer el nivel aislamiento con
que se debe ejecutar la transaccion y su modo de acceso (solo
lectura o lectura/escritura).
COMMIT: Valida los cambios realizados (sobre la base de datos) por
la transaccion actual y finaliza la transaccion.
ROLLBACK: Deshace todos los cambios realizados por la
transaccion actual y finaliza la transaccion.
SAVEPOINT: Crea una marca dentro de la transaccion actual.
Gestion de transacciones en
SQL:2003
ROLLBACK TO SAVEPOINT: Deshace los cambios realizados a
partir de la marca, borrando las marcas que se hayan hecho por
detras de ella.
RELEASE SAVEPOINT: Elimina una marca creada previamente
dentro de la transaccion actual.
SET TRANSACTION: Permite establecer el nivel de aislamiento de
una transaccion y su modo de acceso.
17
Gestion de transacciones en
SQL:2003
A continuacion se muestra la sintaxis de las sentencias que permiten
establecer el nivel de aislamiento y el modo de acceso de la
transaccion:
START TRANSACTION [ ISOLATION LEVEL nivel ] [ READ ONLY |
READ WRITE ]
SET TRANSACTION [ ISOLATION LEVEL nivel ] [ READ ONLY |
READ WRITE ]
donde nivel puede ser SERIALIZABLE, REPETEABLE READ, READ
COMMITTED o READ UNCOMMITTED.
Gestion de transacciones en
PostgreSQL
La version 7de PostgreSQL proporciona las sentencias del estandar :
START TRANSACTION, SET TRANSACTION, COMMIT y
ROLLBACK.
La version 8 incorpora, ademas, la posibilidad de trabajar con marcas
mediante las sentencias:
SAVEPOINT, ROLLBACK TO SAVEPOINT y RELEASE
SAVEPOINT.
Si no se especifica el inicio de una transaccion, PostgreSQL trata
cada sentencia SQL como una transaccion.
18
Gestion de transacciones en
ORACLE
Oracle proporciona todas las sentencias del estandar para manejo de
transacciones excepto START TRANSACTION y RELEASE
SAVEPOINT.
Una vez finalizada una transaccion, la siguiente sentencia SQL
ejecutada inicia una nueva transaccion, que deber´a ser finalizada
de manera explıcita mediante COMMIT o ROLLBACK.
Gestion de transacciones en
Aislamiento
Nivel de aislamiento
SERIALIZABLE
REPETEABLE READ
READ COMMITTED
READ UNCOMMITTED
lectura sucia lectura irrepetible lectura fantasma
no
no
no
puede
no
no
puede
puede
no
puede
puede
puede
En el unico nivel en que no puede producirse ninguna de ellas es en
el SERIALIZABLE.
19
GRACIAS!!...
20
Descargar