Transacción Es una unidad lógica de trabajo (procesamiento) de la base de datos que incluye una o más operaciones de acceso a la base de datos, que pueden.

Slides:



Advertisements
Presentaciones similares
Transacciones y Concurrencia en Oracle
Advertisements

Transacciones (MySQL). Definición: Conjunto de sentencias que se tratan como una sola. Comienzan con BEGIN/START TRANSACTION; Se puede confirmar (COMMIT)
7. Control de la concurrencia
Universidad del Cauca – FIET – Departamento de Sistemas
Control de Transacciones.
CONCEPTO SOBRE TRANSACCIONES
TRANSACCIONES DISEÑO DE BASE DE DATOS.
Universidad Tecnológica de Izúcar de Matamoros
C ONCURRENCIA Y M ANEJO DE S ESIONES. C ONCURRENCIA Es una propiedad del sistema en el cual muchos calculos se estan ejecutando simultaneamente, y son.
Diseña y administra base de datos avanzadas
SQL (Structured Query Language) Lenguaje orientado a bases de datos y sobre todo, al manejo de consultas; el objetivo principal de SQL es la realización.
Comandos de SQL Prog. Orientada a Eventos. Inserción de datos (INSERT) INSERT….VALUES INSERT INTO Tabla1 (Columna1, Columna2…) VALUES (‘ValorAlfa’, ValorNum…);
MSSQL SERVER CURSO BÁSICO 1. DESCRIPCIÓN DEL CURSO. Sesión 4: Sentencia Insert,Transacciones,Insert general, Insert Select * From, Sentencia Update,Update.
Paralelización de operaciones
Querys a bases de datos con MS ACCESS. DEFINAMOS LOS TERMINOS: DML=Lenguaje de manipulación de datos Las sentencias DML permiten generar consultas para.
Clase 09.  Garantizar la calidad de software  La prueba nunca termina, del IS translada se translada al usuario  Las casas de software invierte del.
Lenguaje MySQL, DDL (Lenguaje de definición de datos) Ing. Linda Masias Morales.
COMANDOS SQL. ¿QUÉ ES SQL? El lenguaje de consulta estructurado es un lenguaje declarativo que permite la creación, acceso e interacción de bases de datos.
Curso PHP y MySQL Germán Galeano y Juan Bachiller Del 6 de Febrero al 12 de Marzo de 2012.
1 Concurrencia y Transacciones (... o bien, transacciones y concurrencia...) Universidad de los Andes Demián Gutierrez Enero 2009.
COMANDOS BÁSICOS MYSQL BASES DE DATOS 2 UNIVERSIDAD DE LA AMAZONIA.
Conferencia 7. Lenguaje SQL Estándar. Ejemplos.
UNIDAD 7.
SISTEMAS NUMERICOS ING. SUSANA BELTRAN.
BASE DE DATOS.
SQL: Structured Query Language
Gestión de transacciones
PL/SQL Francisco Moreno Universidad Nacional.
Aidan Hogan CC Bases de Datos Primavera 2016 Clase 11: Integridad, Transacciones, ACID (I) Aidan Hogan
Estructuras de Control en Visual Basic.net
Lenguaje de manipulación de datos
Paul Leger Transacciones Paul Leger
CC Bases de Datos Primavera Clase 12: Implementación de ACID
SEGURIDAD SQL Usuarios, privilegios y perfiles.
Tipos de datos en MYSQL YEAR: Año. “YYYY” o “YY”
SQL Prof. Martín Contreras.
Ciclos condicionales y exactos Estructura de control de ciclos
SQL: Structured Query Language
Datapath para las instrucciones aritméticas y lógicas
EL CPU.
Estructuras de Control en Visual Basic.net
Structure Query Languaje
UN DISPARADOR O TRIGGER es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación. Es una rutina autónoma.
Lenguaje Estructurado de Consultas
TRANSACCIONES ATÓMICAS: ING. WALTER ZULOAGA CONTRERAS ALUMNOS: SHARON Y. CONZA CASTILLO BEKER MONTERROSO VALVERDE.
4. Concurrencia.
SQL Lenguaje de Consulta Estructurado
UNIVERSIDAD PRIVADA SAN JUAN BAUTISTA ESCUELA PROFESIONAL DE INGENIERIA DE COMPUTACION Y SISTEMAS TRANSACCIONES Integrantes: Cancho Ramirez Kiara Angulo.
Bases De Datos : Consultas
Qu é define el Plan Maestro de Producci ó n - MPS?
Lenguaje de Manipulación de Datos
La replicación es una buena solución al problema de mover datos entre un servidor central y clientes que sólo se conectan en determinadas ocasiones. La.
Orígenes Funciones Condicionales
UN EJEMPLO DE LECTURA CONSISTENTE EN INNODB
Join en MySQL.
Structure Query Languaje
Base de Datos II 2da Parte. Propiedad ACID  La propiedad ACIDa es una carácterística de un DBMS para poder compartir datos en forma segura.  A :
ESTRUCTURAS DE CONTROL EN VISUAL BASIC.NET Prof.: Rafael Mourglia.
Bases de Datos.
Una transacción corresponde a un grupo de sentencias que representan una unidad de trabajo y deben ejecutarse en su totalidad.
Administración de Base de Datos Recuperación de datos Profesora: Mercy Ospina UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS.
Transacciones LOTES: es un conjunto de instrucciones de transact-SQL interpretadas juntas, las instrucciones se envían juntas y la palabra reservada GO.
Pruebas República Bolivariana de Venezuela
Universidad Alonso de Ojeda Facultad de Ingeniería
Modificación de datos. Introducción Uso de transacciones Inserción de datos Eliminación de datos Actualización de datos Consideraciones acerca del rendimiento.
Normalmente emparejamos tablas que están relacionadas entre sí y una de las columnas de emparejamiento es clave principal, pues en este caso, Cuando una.
TRIGGERS VISTAS Y PROCESOS Ing. Fabiola Nilda Perez Oliver
CC Bases de Datos Otoño Clase 10: SQL: Vistas y Disparadores
CC Bases de Datos Otoño 2019 Clase 11: Transacciones y ACID
INSTITUO TECNOLOGICO SUPERIOR DE CALKINI EN EL ESTADO DE CAMPECHE SISTEMAS OPERATIVOS II Ingeniería En Informática Equipo: «Letras Mayas» 3.3 MODELOS DE.
Transcripción de la presentación:

Transacción Es una unidad lógica de trabajo (procesamiento) de la base de datos que incluye una o más operaciones de acceso a la base de datos, que pueden ser de inserción, modificación o recuperación. Las transacciones pueden delimitarse de forma explicita con sentencias de tipo “iniciar transacción” y “terminar transacción”. iniciar T0 ... operaciones ... terminar T0

Transacción Además, en las transacciones tenemos operaciones básicas (“leer elemento”, “escribir elemento”), y cálculos sobre los datos leídos. iniciar T0 leer(A) leer(B) A = A + B B = B * 1.1 escribir(A) escribir(B) terminar T0 ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Concurrencia Es cuando muchas transacciones acceden a la misma Base de Datos al mismo tiempo. Especialmente, cuando acceden a los mismos datos de la misma Base de Datos al mismo Tiempo.

Sean T0 y T1 dos transacciones: leer(A) A = A – 50 escribir(A) leer(B) B = B + 50 escribir(B) T1: temp = A * 0.1 A = A - temp B = B + temp Donde A y B son saldos de dos cuentas bancarias diferentes con valores de 1000 y 2000 respectivamente A + B = 3000. ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Actualización Perdida T0 (Transferencia) T1 (Ganancia) leer(A) A = A – 50 escribir(A) leer(B) B = B + 50 escribir(B) A = A + 100 lectura de A en T1 se hace antes de que T0 tenga oportunidad de actualizar A Escritura de A en T1 hace que el valor de A de T0 se pierda T1 lee el valor de A antes de que T0 lo pueda actualizar, luego T0 escribe A, pero después T1 sobre escribe A con un valor incorrecto. Como consecuencia la actualización que hizo T0 se pierde. ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Actualización Temporal (Lectura Sucia) leer(A) A = A – 50 escribir(A) leer(B) ... ¡T0 aborta! A = A + 100 T1 va a realizar sus cálculos con un valor de A que no es válido porque T0 aborta T1 lee el valor de A luego de que T0 lo escribió, y realiza cálculos en base a dicho valor de A. Sin embargo, luego T0 aborta, por lo tanto el valor de A leído por T1 ya no es válido. ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Resumen Incorrecto T0 T1 leer(A) A = A – 50 escribir(A) leer(B) B = B + 50 escribir(B) suma = 0 suma = suma + A suma = suma + B La suma se debería hacer completamente antes o después de T0, pero no en el medio T1 está calculando la suma (o cualquier otra función agregada) con un valor correcto de A, pero con un valor incorrecto (anterior) de B. ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Niveles de Aislamiento Entre Transacciones READ UNCOMMITTED: Permite hacer lecturas sucias (dirty reads), donde las consultas dentro de una transacción son afectadas por cambios no confirmados (not commited) de otras transacciones READ UNCOMMITTED (dirty reads) Transacción 1 Transacción 2 select * from user where id = 1 ; update user set edad = 21 where id = 1; ROLLBACK; ¿Qué resultado tendremos luego del primer select y luego del segundo ? ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Niveles de Aislamiento Entre Transacciones READ COMMITTED: Los cambios confirmados son visibles dentro de otra transacción esto significa que dos consultas dentro de una misma transacción pueden retornar diferentes resultados (Generalmente este es el comportamiento por defecto en los SGBD) READ COMMITTED (Non-repeatable reads) Transacción 1 Transacción 2 select * from user where id = 1 ; commit; update user set edad = 21 where id = 1; ¿Qué resultado tendremos luego del primer select y luego del segundo ? ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Niveles de Aislamiento Entre Transacciones REPEATABLE READ: Dentro de una transacción todas las lecturas son consistentes (Esto es el comportamiento por defecto en MySQL. REPEATABLE READ Transacción 1 Transacción 2 select * from user where edad between 10 and 30; insert into user values (3,’Juan’,27); commit; ¿La primera y la segunda consulta retornan la misma cantidad de registros? ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

SERIALIZABLE: No se permiten las actualizaciones en otras transacciones si una transacción ha realizado una consulta sobre ciertos datos (las distintas transacciones no se afectan entre si) Las transacciones están completamente aisladas entre si .

En resumen: PostgreSQL sólo soporta “Read Commited” y “Serializable” Isolation Level Dirty Read NonRepeatable Read Phantom Read Read Uncommitted posible Read Committed No posible Repeatable Read Posible Serializable

Estado de las transacciones En general, las transacciones tienen una serie de estados, que permiten hacerle un adecuado seguimiento

Planificaciones Una planificación representa el orden cronológico en que se ejecutan o se han ejecutado las instrucciones de un conjunto de transacciones en el SGBD. Una planificación para una transacción debe conservar todas las instrucciones de la transacción. Además, se debe conservar el orden de las instrucciones dentro de la transacción. Plan: L1(A), L0(A), E0(A), L0(B),E1(A), E0(B), L1(B), E1(B) T0 T1 Read(A) Write(A) Read(B) Write(B) ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Un plan en serie (serial) es aquel en que las transacciones se ejecutan completas en secuencia una detrás de otra. T0 T1 Read(A) Write(A) Read(B) Write(B) T0 T1 Read(A) Write(A) Read(B) Write(B) ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Un plan no en serie (no serial, o plan intercalado) es aquel en el que se intercalan de forma simultánea instrucciones de distintas transacciones T0 T1 Read(A) Write(A) Read(B) Write(B) ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Planificación en serie nunca genera problemas T0 T1 leer(A) A = A – 50 escribir(A) leer(B) B = B + 50 escribir(B) temp = A * 0.1 A = A - temp B = B + temp Los valores finales de A y B son 855 y 2145 respectivamente A + B = 3000 ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Planificación en serie nunca genera problemas T0 T1 leer(A) A = A – 50 escribir(A) leer(B) B = B + 50 escribir(B) temp = A * 0.1 A = A - temp B = B + temp Los valores finales de A y B son 850 y 2150 respectivamente A + B = 3000 ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

La planificación es concurrente, y si bien no está en serie, el plan es “serializable”. La planificación NO está en serie (operaciones de T0 y T1 intercaladas) T0 T1 leer(A) A = A – 50 escribir(A) leer(B) B = B + 50 escribir(B) temp = A * 0.1 A = A - temp B = B + temp Los valores finales de A y B son 855 y 2145 respectivamente A + B = 3000 (Mismo resultado que en serie). ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Los planes en serie siempre son seguros (No presentan anomalías) mientras que no todos los planes intercalados son seguros. Los planes en serie suelen ser poco eficientes. T0 T1 leer(A) A = A – 50 escribir(A) leer(B) B = B + 50 escribir(B) temp = A * 0.1 A = A - temp B = B + temp Los valores finales de A y B son 950 y 2100 respectivamente A + B = 3050 (se perdió 50) En estos casos se dice que la planificación no es serializable ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Operaciones Conflictivas El orden no importa, ya que T0 y T1 leen el mismo valor de A. { T0, leer(A) } {T1 , leer(A) } El orden no importa para T0 o T1, pero se producen problemas porque el valor escrito por T0 se sobreescribe por T1. { T0, escribir(A) } { T1, escribir(A) } El orden si importa, porque T0 está leyendo un valor que deja de ser válido cuando T1 realiza la escritura. Aplican las mismas consideraciones que en el caso anterior, aun cuando esta combinación en concreto no genera anomalías. { T1, leer(A) }

Conflicto Se dice que dos operaciones Oi e Oj de un plan S están en conflicto si operan sobre el mismo dato, pertenecen a transacciones distintas y al menos una de ellas es escribir. Si dos operaciones NO están en conflicto entonces es posible intercambiar el orden en que se ejecutan sin generar ningún tipo de anomalía. Es posible llevar una planificación paralela a un plan en serie equivalente. Para esto, es necesario analizar las transacciones y las posibles operaciones en conflicto que pueden aparecer. Es posible intercambiar el orden en el que se ejecutan dos operaciones que NO están en conflicto y de esta manera, es posible que se pueda obtener un plan en serie equivalente

Si se verifica la seriabilidad de los planes, entonces no se producirá ninguna de las anomalías mostradas anteriormente. Sin embargo, en la práctica, comprobar la seriabilidad de los planes no es posible por razones de rendimiento y porque usualmente no se conocen de antemano todas las operaciones (y la secuencia de estas) que realizará una transacción (o si esta abortará o terminará satisfactoriamente). Normalmente, los SGBD en lugar de verificar la seriabilidad implementan “protocolos” que “garantizan” que los planes resultantes son “serializables”: Protocolos Basados en Bloqueos: Exigen que el acceso a los datos se haga de forma mutuamente excluyente. Protocolos Basados en Marcas de Tiempo: Utilizan marcas de tiempo para determinar el orden de serializabilidad

Hay distintos tipos de bloqueos: Compartidos (de lectura) o Exclusivos (de escritura) Bloqueo-E(A) leer(A) A = A + 50 escribir(A) Desbloqueo(A) Bloqueo-E(B) leer(B) B = B – 50 escribir(B) Desbloqueo(B) Bloqueo-L(A) Desbloqeo(A) Bloqueo-L(B) Desbloqeo(B) imprimir(A + B) ¿Cuanto debe valer A+B si los planes fueran en serie? ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Hay distintos tipos de bloqueos: Compartidos (de lectura) o Exclusivos (de escritura) Bloqueo-E(A) leer(A) A = A + 50 escribir(A) Desbloqueo(A) Bloqueo-E(B) leer(B) B = B – 50 escribir(B) Desbloqueo(B) Bloqueo-L(A) Desbloqeo(A) Bloqueo-L(B) Desbloqeo(B) imprimir(A + B) ¿Qué es lo que está funcionando mal? ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Coincidencia de acceso y bloqueos En el curso de una transacción que actualiza tablas MySQL impone bloqueos para evitar actualizaciones coincidentes que darían lugar a resultados incorrectos. Cuando una sesión efectúa un UPDATE o un DELETE en una tabla en el curso de una transacción, MySQL establecerá un bloqueo exclusivo a nivel de fila en las filas en cuestión. En ese caso, las otras sesiones esperarán cuando realicen un intento de modificación o eliminación de las filas bloqueadas; en cambio, pueden modificar o eliminar otras filas no bloqueadas, o insertar nuevas. Es posible establecer un bloqueo de filas en la lectura añadiendo la cláusula FOR UPDATE al final de la sentencia SELECT.

Coincidencia de acceso y bloqueos Sesión 1 Sesión 2 SET AUTOCOMMIT = 0; UPDATE pedido SET cantidad = 2 WHERE id_pedido = 3; SELECT cantidad FROM pedido WHERE id_pedido = 3; UPDATE pedido SET cantidad = 3 WHERE id_pedido = 3; commit; ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!

Coincidencia de acceso y bloqueos Sesión 1 Sesión 2 UPDATE pedido SET cantidad = 4 WHERE id_pedido = 3; SELECT cantidad FROM pedido WHERE id_pedido = 3 FOR UPDATE; COMMIT; ¡¡¡ ESCRIBIR Y PROBAR LA EJECUCIÓN DE LAS TRANSACCIONES EN SU SGBD PREFERIDO !!!