Escolar Documentos
Profissional Documentos
Cultura Documentos
INTRODUCCIN
consistentes
informacin
errnea,
tengan
sentido,
grupo
este
de
de
otro
modo
sentencias
se
tendramos
les
llama
transacciones.
Una transaccin en un sistema de gestin de bases de datos. En un
principio MySQL no soportaba las transacciones, esto cambi a partir de
la versin 4, con el uso de tablas InnoDB. InnoDB ofrece cuatro niveles
de aislamiento de transacciones, el nivel de aislamiento ser establecido
por los usuarios de acuerdo a sus necesidades. Cabe mencionar que el
nivel predeterminado en InnoDB es REPEATABLE READ.
Las transacciones son ampliamente utilizadas en sistemas bancarios por
mencionar solo un ejemplo.
En presente trabajo tiene como objetivo mostrar casos semejantes a la
realidad de los cuatro IL: READ UNCOMMITTED, READ COMMITTED,
REPEATABLE READ, SERIALIZABLE y mostrar sus ventajas y desventajas
sobre el uso de cada nivel de aislamiento.
Tabla: asiento
Name
Type
idAsiento
Int (11)
Descripcion
Varchar (80)
Estado
Char (1)
hace una
Verificamos
el
nivel
de
aislamiento
(local)
que
est
activo
SELECT @@TX_ISOLATION;
SET SESSION TRANSACTION
READ UNCOMMITTED;
T1
ISOLATION
LEVEL
T2
Establece la conexin
C:\>mysql -u root reservas
Welcome to the MySQL monitor.
Commands end with ; or \g.
Your MySQL connection id is 63
Server version: 5.0.21-community-nt
Type 'help;' or '\h' for help. Type '\c' to
clear the buffer.
T1 inicia la transaccin
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
Establece la conexin
C:\>mysql -u root reservas
Welcome to the MySQL monitor.
Commands end with ; or \g.
Your MySQL connection id is 64
Server version: 5.0.21-community-nt
Type 'help;' or '\h' for help. Type '\c' to clear
the buffer.
T2 inicia la transaccin
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
el
Lectura sucia
Ti aborta la transaccin
5
mysql> rollback;
Query OK, 0 rows affected (0.03 sec)
|
|
|
|
|
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
T1
T2
T2 inicia la transaccin
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
+-----------+---------------+--------------------------
+-----------+---------------+--------------------------
+--------------+
| idSector | Descripcion| CantidadReservados|
Capacidad |
+-----------+---------------+-------------------------+--------------+
|
4
| SECTOR 04 |
49
50
|
+-----------+---------------+-------------------------+--------------+
+----------------------------------------------------+
| msg
|
+----------------------------------------------------+
| Reservacion completada correctamente |
+----------------------------------------------------+
Lectura sucia
se completo la reservacion!
|
+-----------------------------------------------------------------------+
T1 cancela la reservacin
mysql> call usp_CancelarReserva(4,@);
+---------------------------------------------------+
| msg
|
+---------------------------------------------------+
| Reservacion cancelada correctamente! |
+---------------------------------------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
CONCLUSIN:
Nivel de Aislamiento
READ-COMMITTED
Nivel de
aislamiento
READCOMMITTE
D
Lectura sucia
-
Lectura no
repetibles
Puede ocurrir
Lectura
fantasmas
Puede ocurrir
Isolation level
Bloqueo de
escritura
v
Bloque de
lectura
-
Bloqueo de
rango
-
Base de datos
ll
que
utilizaremos
READCOMMITTE
D
+-------------------+
Niveles de
vs bloqueos
| Tables_in_estadio |
aislamiento
+-------------------+
| asiento
| sector
TABLA
+-------------------+
QUE
2 rows in set (0.00 sec)
Caso N
READ COMMITTED
2:
USAREM
OSel nivel READ
Colocamos a ambas conexiones en
COMMITTED, en mysql el nivel por defecto es el
REPEATABLE READ por ello tenemos
nivel de aislamiento.
1 | SECTOR 01 |
50 |
50 |
2 | SECTOR 02 |
50 |
50 |
3 | SECTOR 03 |
0|
4 | SECTOR 04 |
49 |
50 |
5 | SECTOR 05 |
50 |
50 |
50 |
1.-Como ejemplo tenemos que dos usuarios del sistema de reservaciones de asientos para un partido de futbol,
estn haciendo uso de un oftware, uno de ellos realiza una nueva reservacin de un asiento en el SECTOR01,
mientras el otro tambin realiza la misma operacin.
Transaccin A
Transaccin B
Ambas transacciones se ponen el nivel de aislamiento en REPEATABLE READ para comenzar sus operaciones.
mysql> set global transaction isolation level read committed;
Query OK, 0 rows affected (0.02 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
La transaccin A esta seleccionando la idSector cual se esta haciendo un bloqueo compartido (de esta manera en transaccin B no
podr realizar ninguna operacin sobre ese registro.
5
CURRENT_TIME(
); ve la hora que
fue ejecutado la
transaccin
No hay lectura
sucia
|
5 | SECTOR 05 |
50 |
50 |
+----------+-------------+--------------------+-----------+
5 rows in set (0.00 sec)
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
11
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> call ups_Reservar1('4');
+----------------------------------------------------------------------+
| Se ha sobrepasado la capacidad maxima. No se
completo la reservacion! |
+----------------------------------------------------------------------+
1 row in set (0.00 sec)
LECTURA
FANTASM
A
No hay lectura
sucia
Lectura Fantasma: En este caso dos usuarios estn utilizando el software uno de ellos realiza un cambio en la
capacidad, mientras el otro intenta leer los asientos con capacidadReservados >=30 pasajeros.
Transaccin A
Transaccin B
Ambas transacciones se ponen el nivel de aislamiento en REPEATABLE READ para comenzar sus operaciones.
mysql> set global transaction isolation level read committed;
Query OK, 0 rows affected (0.02 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
Hay lectura
fantasma
mysql>commit;
Query OK, 0 rows affected (0.00 sec)
mysql>commit;
8
Modificacin por
cancelacin de 30
reservaciones
T1
T2
T1 inicia la transaccin
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
+-----------+---------------+-------------------------+------------+
|idSector| Descripcion| CantidadReservados|
Capacidad|
+-----------+---------------+-------------------------+-----------+
|
3
| SECTOR 03 |
0
|
50 |
|
4
| SECTOR 04 |
49
|
50 |
+-----------+---------------+--------------------------
T2 inicia la transaccin
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
Lock wait
timeout
exceeded
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
CONCLUSIN:
CONCLUSIONES
InnoDB
nos
ofrece
UNCOMMITTED,
cuatro
READ
niveles
COMMITTED,
de
aislamiento
REPEATABLE
READ
READ,