Beruflich Dokumente
Kultur Dokumente
Administracin de BD
Ing. Aida Avila
Definicin de transacciones
Las transacciones son un concepto fundamental de todos
los sistemas de bases de datos. El punto esencial de una
transaccin es su capacidad para empaquetar varios
pasos en una sola operacin todo o nada. Los estados
intermedios entre los pasos no son visibles para otras
transacciones concurrentes, y si ocurre alguna falla que
impida que se complete la transaccin, entonces ninguno
de los pasos se ejecuta y no se afecta la base de datos
en absoluto.
Estructura
Transacciones Planas
Es una secuencia de operaciones primitivas entre las
marcas BEGIN y END
Transacciones Anidadas
Las operaciones de las transacciones pueden ser en si
mismas una transaccin
Control de concurrencia
El control de accesos concurrentes y especficamente de transacciones
concurrentes es manejado por un mdulo del dbms llamado "scheduler".
Es importante recordar que muchos de los datos de la base no se
encuentran nada ms en disco, sino tambien en los buffers de memoria,
de ah que el scheduler interacta con ellos y en su defecto solicita la
lectura de los datos del disco.
Control de concurrencia
Conceptos relacionados con el control de concurrencia:
Serializabilidad:
Un plan serializable implica que el plan es correcto
Deja la base de datos en un estado consistente
El intercalamiento es apropiado y resultar en un estado como si las
transacciones fueran ejecutadas secuencialmente, pero ser eficiente
debido a la ejecucin concurrente.
La serializabilidad es difcil de verificar
El intercalamiento de las operaciones ocurre en el sistema operativo a
travs de un planificador
Difcil determinar de antemano como las operaciones sern intercaladas
Enfoque prctico:
Protocolos asegurando la serializabilidad a travs del uso de Candados (locks)
Control de concurrencia
Control de concurrencia
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
transaccin conflictiva que acceda al mismo dato. As, la ejecucin de cualquier
operacin de una transaccin sigue la secuencia de fases: validacin (V), lectura
(R), cmputo (C) y escritura (W). Los algoritmos optimistas, por otra parte,
retrasan la fase de validacin justo antes de la fase de escritura. De esta manera,
una operacin sometida a un despachador optimista nunca es retrasada.
Control de concurrencia
Control de Concurrencia Basado en Lock:
En los algoritmos basados en candados, las transacciones indican sus intenciones
solicitando candados al despachador (llamado el administrador de candados) Los
candados son de lectura , tambin llamados compartidos, o de escritura , tambin
llamados exclusivos.
En sistemas basados en candados, el despachador es un administrador de
candados . El administrador de transacciones le pasa al administrador de
candados la operacin sobre la base de datos (lectura o escritura) e informacin
asociada, como por ejemplo el elemento de datos que es accedido y el
identificador de la transaccin que est enviando la operacin a la base de datos.
Las tablas del tipo InnoDB estn estructuradas de forma distinta que
MyISAM, ya que se almacenan en un slo archivo en lugar de tres, y sus
principales caractersticas son que permite trabajar con transacciones, y
definir reglas de integridad referencial.
NOTA:
mysql> CREATE TABLE innotest (campo INT NOT NULL PRIMARY KEY)
TYPE = InnoDB;
Query OK, 0 rows affected (0.10 sec)
mysql> BEGIN;
Query OK, 0 rows affected (0.01 sec)
mysql> ROLLBACK;
Query OK, 0 rows affected (0.06 sec)
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> COMMIT;
Query OK, 0 rows affected (0.02 sec)
mysql> EXIT;
Bye
Lecturas Consistentes
Por defecto, las tablas InnoDB ejecutan una lectura consistente
(consistent read). Esto significa que cuando una sentencia SELECT es
ejecutada, MySQL regresa los valores presentes en la base de datos
hasta la transaccin ms reciente que ha sido completada. Si alguna
transaccin est en progreso, los cambios hechos por alguna sentencia
INSERT o UPDATE no sern reflejados. Sin embargo, existe una
excepcin: las transacciones abiertas si pueden ver sus propios
cambios. Para demostrar esto, necesitamos establecer dos conexiones
al servidor MySQL.
Primero agregaremos un registro dentro de una transaccin con la
primera conexin (ID 524):
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
Ahora, desde la segunda conexin (ID 525) consultamos los datos de nuestra
tabla.
Otro Ejemplo
En el ejemplo anterior hemos usado nicamente sentencias INSERT, sin
embargo, sucede lo mismo con sentencias UPDATE o DELETE.
Vamos a crear una sencilla tabla llamada ventas que sea del tipo InnoDB.
mysql> CREATE TABLE ventas(
-> id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> producto VARCHAR(30) NOT NULL,
-> cantidad TINYINT NOT NULL) TYPE = InnoDB;
Insertamos un registro.
mysql> INSERT INTO ventas VALUES(0,'Gansito marinela',3);
Query OK, 1 row affected (0.16 sec)
mysql> SELECT * FROM ventas;