transacciones en sql - — departamento de … · iso sql: cualquier comando sql al comienzo de una...

35
Transacciones en SQL Lic. Gerardo Rossel 2016

Upload: hahanh

Post on 26-Aug-2018

244 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Transacciones en SQL

Lic. Gerardo Rossel

2016

Page 2: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Conceptos Generales

Page 3: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Transacciones Implícitas/Explicitas

ISO SQL: cualquier comando SQL al comienzo de unasesión o inmediato posterior al fin de una transaccióncomienza automáticamente una nueva transacción (DB2y Oracle)

SQL Server, MySQL/InnoDB, PostgreSQL funcionan pordefecto en modo AUTOCOMMIT

MySQL/InnoDB: SET AUTOCOMMIT = 0|1SQL Server: SET IMPLICIT_TRANSACTIONS [ON|OFF]PostgreSQL: SET AUTOCOMMIT = [ON|OFF]

Page 4: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Transacciones Implícitas/Explicitas

ISO SQL: cualquier comando SQL al comienzo de unasesión o inmediato posterior al fin de una transaccióncomienza automáticamente una nueva transacción (DB2y Oracle)

SQL Server, MySQL/InnoDB, PostgreSQL funcionan pordefecto en modo AUTOCOMMIT

MySQL/InnoDB: SET AUTOCOMMIT = 0|1SQL Server: SET IMPLICIT_TRANSACTIONS [ON|OFF]PostgreSQL: SET AUTOCOMMIT = [ON|OFF]

Page 5: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Transacciones

BEGIN/START TRANSACTION;COMMIT;ROLLBACK;

INSERT INTO Tabla ( id , s ) VALUES (1 , ’primero ’ ) ;INSERT INTO Tabla ( id , s ) VALUES (2 , ’segundo ’ ) ;INSERT INTO Tabla ( id , s ) VALUES (3 , ’ tercero ’ ) ;SELECT * FROM Tabla ;

ROLLBACK;SELECT * FROM Tabla ;

AUTOCOMMIT

Una sentencia SQL enviada a la base de datos en modoAUTOCOMMIT no puede ser desecha (rollback)

Page 6: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Transacciones

BEGIN/START TRANSACTION;COMMIT;ROLLBACK;

INSERT INTO Tabla ( id , s ) VALUES (1 , ’primero ’ ) ;INSERT INTO Tabla ( id , s ) VALUES (2 , ’segundo ’ ) ;INSERT INTO Tabla ( id , s ) VALUES (3 , ’ tercero ’ ) ;SELECT * FROM Tabla ;

ROLLBACK;SELECT * FROM Tabla ;

AUTOCOMMIT

Una sentencia SQL enviada a la base de datos en modoAUTOCOMMIT no puede ser desecha (rollback)

Page 7: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Transacciones

BEGIN/START TRANSACTION;COMMIT;ROLLBACK;

INSERT INTO Tabla ( id , s ) VALUES (1 , ’primero ’ ) ;INSERT INTO Tabla ( id , s ) VALUES (2 , ’segundo ’ ) ;INSERT INTO Tabla ( id , s ) VALUES (3 , ’ tercero ’ ) ;SELECT * FROM Tabla ;

ROLLBACK;SELECT * FROM Tabla ;

AUTOCOMMIT

Una sentencia SQL enviada a la base de datos en modoAUTOCOMMIT no puede ser desecha (rollback)

Page 8: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Precaución

Supongamos lo siguiente:

SQL Server

SET XACT_ABORT { ON | OFF }

Page 9: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Precaución

Supongamos lo siguiente:

SQL Server

SET XACT_ABORT { ON | OFF }

Page 10: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Precaución

Supongamos lo siguiente:

SQL Server

SET XACT_ABORT { ON | OFF }

Page 11: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Precaución

Page 12: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Precaución

Page 13: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Precaución

Page 14: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

(ISO-89)SQLCODE ⇒(ISO-92)SQLSTATE

5 Caracteres :Clase 2 Caracteres

0000 Exito01 Warning02 No Data07 Dynamic SQL ERROR08 Connection Exception22 Data Exception40 Transaction Rollback

Subclase 3 Caracteres

Page 15: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Niveles de Aislamiento

Niveles de aislamiento

El nivel de aislamiento controla el grado en que unatransacción dada está expuesta a la acciones de otrastransacciones ejecutándose simultáneamente.

Problemas:

Lost Update

Dirty Read

Non-Repeatable Read (Fuzzy Read)

Phantom Read

Page 16: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Niveles de Aislamiento

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITED;

Defecto

Page 17: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Niveles de Aislamiento

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITED;

Defecto

Page 18: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

PostgreSQL

Page 19: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

PostreSQL: MVCC

MVCC

PostgreSQL usa control de concurrencia multiversión

Cada transacción ve un snapshot a partir de su comienzo(timestamp). No importa lo que otras transaccioneshagan mientras esta en ejecución.

Las lecturas no bloquean a las escrituras ni las escriturasbloquean a las lecturas

Las escrituras bloquean a otras escrituras sólo cuando seactualiza la misma fila.

Page 20: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Niveles de Aislamiento

MVCC

En PostgreSQL se pueden definir los 4 niveles del standardSQL pero internamente los soportados son 3: ReadCommitted, Repeatable Read y Serializable.

Read uncommitted en realidad se comporta como ReadCommitted

Repeatable Read. En el ISO SQL se permite PhantomRead pero PG no lo permite. Es en realidad equivalente asnapshot isolation

Serializable: utiliza una técnica denomiada SerializableSnapshot Isolation. Es similar Repeatable Read peromonitorea si se produce algún comportamiento quepueda violar la serializabilidad.

Page 21: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

SQL Server

Page 22: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Niveles de Aislamiento SQLServer

Read Commited (Optimista o Pesimista, RCSI o RCI):

SET READ_COMMITTED_SNAPSHOT ON (multi-versión)

Versiones de filas (row versioning)

SET READ_COMMITTED_SNAPSHOT OFF (default)

Shared locks (read lock) son levantados inmediatamente.

RCSI Precio producto 922 es $8,89

Page 23: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Niveles de Aislamiento SQLServer

Read Commited (Optimista o Pesimista, RCSI o RCI):

SET READ_COMMITTED_SNAPSHOT ON (multi-versión)

Versiones de filas (row versioning)

SET READ_COMMITTED_SNAPSHOT OFF (default)

Shared locks (read lock) son levantados inmediatamente.

RCSI Precio producto 922 es $8,89

Page 24: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Repeatable Read

Locks en repeateable red

Shared locks (read lock) se mantienen durante toda latransacción

Write Locks

Los locks exclusivos siempre deben mantenerse hasta elfinal de una transacción, sin importar el nivel de aislamiento omodelo de concurrencia, de modo que una transacción puedarevertirse si es necesario

Page 25: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Repeatable Read

Locks en repeateable red

Shared locks (read lock) se mantienen durante toda latransacción

Write Locks

Los locks exclusivos siempre deben mantenerse hasta elfinal de una transacción, sin importar el nivel de aislamiento omodelo de concurrencia, de modo que una transacción puedarevertirse si es necesario

Page 26: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Niveles de Aislamiento SQLServer: Snapshot (SI)

Optimista

Permite a los procesos leer viejas versiones de los datos que fueroncommited si la versión actual esta locked.

ALTER DATABASE databasename SET ALLOW_SNAPSHOT_ISOLATION ON;

Atención

No es equivalente a serializable. Pueden haber dos transacciones que seejecuten simultáneamente y produzcan un resultado imposible en unaejecución serial. Aunque evita los mismos problemas

Page 27: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Niveles de Aislamiento SQLServer: Snapshot (SI)

Optimista

Permite a los procesos leer viejas versiones de los datos que fueroncommited si la versión actual esta locked.

ALTER DATABASE databasename SET ALLOW_SNAPSHOT_ISOLATION ON;

Atención

No es equivalente a serializable. Pueden haber dos transacciones que seejecuten simultáneamente y produzcan un resultado imposible en unaejecución serial. Aunque evita los mismos problemas

Page 28: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Niveles de Aislamiento SQLServer: Snapshot (SI)

Optimista

Permite a los procesos leer viejas versiones de los datos que fueroncommited si la versión actual esta locked.

ALTER DATABASE databasename SET ALLOW_SNAPSHOT_ISOLATION ON;

Atención

No es equivalente a serializable. Pueden haber dos transacciones que seejecuten simultáneamente y produzcan un resultado imposible en unaejecución serial. Aunque evita los mismos problemas

Page 29: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Snapshot (SI)

Figura tomada de: "Microsoft SQL 2012 Internals" -Kalen Delaney et. al.

Page 30: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Niveles de Aislamiento SQLServer

set transaction isolation level SERIALIZABLE/SNAPSHOT

begin tran

update marbles set color = ’White’ where color = ’Black’

set transaction isolation level SERIALIZABLE/SNAPSHOT

begin tran

update marbles set color = ’Black’ where color = ’White’

commit tran

commit tran

select * from marbles

Page 31: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Niveles de Aislamiento SQLServer

set transaction isolation level SERIALIZABLE/SNAPSHOT

begin tran

update marbles set color = ’White’ where color = ’Black’

set transaction isolation level SERIALIZABLE/SNAPSHOT

begin tran

update marbles set color = ’Black’ where color = ’White’

commit tran

commit tran

select * from marbles

Page 32: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Niveles de Aislamiento SQLServer

set transaction isolation level SERIALIZABLE/SNAPSHOT

begin tran

update marbles set color = ’White’ where color = ’Black’

set transaction isolation level SERIALIZABLE/SNAPSHOT

begin tran

update marbles set color = ’Black’ where color = ’White’

commit tran

commit tran

select * from marbles

Page 33: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Niveles de Aislamiento SQLServer: Serializable

Pesimista

Requiere que se realice lock sobre datos que han sido leídos y tambiénsobre datos que no existen

Key-range lock: requiere índice sobre la columna.

Table-lock

Page 34: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

SQL server Niveles de Aislamiento

Figura tomada de: "Microsoft SQL 2012 Internals" -Kalen Delaney et. al.

Page 35: Transacciones en SQL - — Departamento de … · ISO SQL: cualquier comando SQL al comienzo de una sesión o inmediato posterior al fin de una transacción ... Fundamentos de Bases

Conceptos Generales PostgreSQL SQL Server

Bibliografía

Transactional Information Systems: Theory, Algorithms, andthe Practice of Concurrency Control and Recovery (The MorganKaufmann Series in Data Management Systems) Gerhard Weikum yGottfried Vossen

Microsoft SQL 2012 Internals. Kalen Delaney y otros

Fundamentos de Bases de Datos Abraham Silberschatz, Henry F.Korth y S Sudarshan

Serializable Isolation for Snapshot Databases Michael J. Cahill,Uwe Röhm, and Alan D. Fekete. 2008. ACM SIGMOD internationalconference on Management of data (SIGMOD ’08)

Mimer SQL 10.0 Technical Description

A critique of ANSI SQL isolation levels H. Berenson, P. Bernstein,J. Gray, J. Melton, E. O’Neil, , and P. O’Neil Proceedings of ACM SIGMODInternational Conference on Management of Data,1995