Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Unidad IV
Concurrencia
Taller de Base de Datos
Maestro Juan Antonio Cañedo
Trasviña
Atomicidad
La atomicidad es una propiedad que indica que un objeto/entidad no puede ser más
divisible.
Los casos en donde se presenta la atomicidad en las transacciones son:
Consultas unitarias
Operaciones abortadas
Elementos
Los elementos son las unidades de datos para los que controlan los accesos. Como
una tupla o una relación.
Granularidad
La granularidad es el tamaño de los elementos. Entre más grande sea, hay menos
concurrencia.
Livelock
Es la espera de una o varias transacciones de manera indefinida por la ejecución
de otras transacciones nuevas.
Podemos solucionarlos con los métodos que vimos en sistemas operativos:
FIFO (First In First Out)
SJF (Short Job First)
Round Robin
Deadlock
Es la espera indefinida por transacciones ocurrida por otras transacciones. Lo que
esperan es que dejen un recurso que necesitan, pero la transacción que posee el
recurso puede también necesitar el recurso que el actual posee.
Consistencia
Se refiere a la coherencia entre todos los datos dentro de la base de datos.
Por el aislamiento de las transacciones, la base de datos permanece consistente.
Aislamiento
Cada transacción de un mismo tiene que ser independientes entre sí. No hay ningún
tipo de dependencia en ningún lado. Una transacción inicia cuando no hay otras o
cuando la anterior termino.
Hay 4 niveles de aislamiento, de manera ascendente son:
Lectura no comprometida
Aquí, la transacción permite la lectura:
Sucia
No repetible
Fantasma
Lectura comprometida
Aquí, la transacción permite la lectura:
No repetible
Fantasma
Repetible
Aquí, la transacción solo puede realizar lecturas fantasmas.
Secuenciable/Serializable
Este es el nivel de aislamiento más alto, no se permite ningún efecto de lectura. O
sea que solo lee los datos que existieron una vez que fue creada la transacción.
Efecto en lectura
Hay un total de 3 efectos en lectura, pueden o no estar presentes dependiendo del
nivel de aislamiento:
Lectura sucia
Se refiere a cuando un texto es modificado, y tal modificación se lee, pero la
operación que realizo la modificación todavía no termino o no indico que ya termino
con su tarea.
Lectura repetible
Una transacción lee un renglón, otra transacción modifica el renglón, luego la
primera transacción lee ese renglón nuevamente y despliega el renglón modificado
y no con el valor que tenia anteriormente.
Lectura fantasma
Es lo mismo a la lectura no repetible, con la diferencia de que en vez de un solo
renglón, se trata de una colección de renglones que fueron conseguidos por una
consulta. Como un intervalo de edades o salario.
Bloqueo
Es información que indica el acceso que tienen permitido los elementos.
Los tipos de bloqueo son:
read-locks: Solo lectura.
write-locks: Lectura y escritura.
Niveles de bloqueo
Hay diferentes niveles de acuerdo con el bloqueo, y son con respecto a las tablas,
estos son:
Fila individual
Clave (fila de un índice)
Página
Tabla
Base de Datos
Modos de bloque
Compartido: Solo permite lecturas.
Exclusivo: Solo una transacción puede escribir.
Actualización: Es una transacción que cambia su modo de bloqueo.
Intención: No se refiere a una sola transacción, si no los bloqueos que
tendrán todas las transacciones. Puede cambiarse a Compartido o Exclusivo
dependiendo de las necesidades.
Commit
Esta instrucción de SQL se utiliza para confirmar como permanentes las
modificaciones realizadas en una transacción.
Las transacciones explícitas son las que se definen en el código y hay que indicar
cuando se inicia con BEGIN TRANSACTION y cuando finaliza COMMIT
TRANSATION.
Cuando se produce el COMMIT, se hacen efectivos los cambios en los ficheros de
datos (.mdf y .ndf). Mientras no se realiza el COMMIT las sentencias de los cambios
se guardan en el log de transacciones (.ldf), que gracias a este es posible revertir
los cambios si fuese necesario.
BEGIN TRANSACTION;
DELETE FROM Paises.telefonos
WHERE id_telefono = 555555555;
COMMIT TRANSACTION;
Rollbacks
Es una operación que devuelve a la base de datos a algún estado previo.
Los Rollbacks son importantes para la integridad de la base de datos, a causa de
que significan que la base de datos puede ser restaurada a una copia limpia incluso
después de que se han realizado operaciones erróneas.
Si se produce un error en una transacción o el usuario decide cancelar la
transacción, hay que echar para tras la transacción. La instrucción ROLLBACK
también libera los recursos que mantiene la transacción.
BEGIN TRANSACTION
DELETE FROM customers
WHERE age = 25
ROLLBACK TRANSACTION;
Save Point
El comando se utiliza para guardar temporalmente una transacción para que pueda
retroceder a ese punto cuando sea necesario.
SAVE TRANSACTION my_savepoint;
BEGIN TRANSACTION
UPDATE Clientes SET Estado = 'Inactivo' WHERE iddepartamento = 1020
UPDATE Clientes SET Estado = 'DeBaja' WHERE iddepartamento=7025
SAVE TRANSACTION Punto1 -- Guardamos la transaccion (Savepoint)
UPDATE Clientes SET Descripcion = 'Ninguna' WHERE idcliente=5896
-- Este ROLLBACK afecta solo a las instrucciones posteriores al savepoint Punto1.
ROLLBACK TRANSACTION Punto1
Bibliografía
ULLMAN, J.D. "Principles of Databases and Knowledge Base Systems", Vol. I, Computer
Science Press, 1998
SILBERSCHATZ, A., KORTH, H.F., SUDARSHAN, S. "Fundamentos de bases de datos", 3ª
edición, McGraw-Hill, 1998.
ATZENI, P., STEFANO, C., PARABOSCHI, S., TORLONE, R., “Database Systems.
Concepts, Languages and Architectures”, McGraw-Hill, 2000.
CONNOLLY, T., BEGG, C., STRACHAN, A., "Database Systems. A Practical Approach to Design,
Implementation, and Management", 2nd edition, Addison-Wesley,1998.
GARCIA, M.F., REDING , J., WHALEN, E.,DeLUCA, S.A., "Microsoft SQL Server 2000
Administrator's Companion", Microsoft, 2000.
Aosbot y otros. (2019). Concurrencia (informática). 12/10/2019, de Wikipedia Sitio web:
https://es.wikipedia.org/wiki/Concurrencia_(inform%C3%A1tica)
mah y Caleb Jares. (2011). What's the difference between deadlock and livelock?.
12/10/2019, de stackoverflow Sitio web:
https://stackoverflow.com/questions/6155951/whats-the-difference-between-deadlock-
and-livelock
Aosbot. (2019). Aislamiento (ACID). 12/10/2019, de Wikipedia Sitio web:
https://es.wikipedia.org/wiki/Aislamiento_(ACID)
Nikola Dimitrijevic. (2018). Todo sobre el bloqueo (locking) en SQL Server. 12/10/2019, de
SQLShack Sitio web: https://www.sqlshack.com/es/todo-sobre-el-bloqueo-en-sql-server/
K-ren Gonzalez. (2012). Concurrencia y SQL Tuning. 12/10/2019, de YouTube Sitio web:
https://www.youtube.com/watch?v=1vyrktUkngw
monkyta y otros. (2007). Concurrencia en sql server. 12/10/2019, de Foros del Web Sitio
web: http://www.forosdelweb.com/f87/concurrencia-sql-server-519836/