Para manejar el acceso concurrencia se utiliza el “Gestion de bloqueo(Lock Management)”
Garantiza la cosnistencia y la integridad de la información
Evita efectos en las transacciones como; que las transacciones accedan de manera segura a los
recursos, evitando efectos como las acrualizaciones o las lecturas incosistentes
TIPOS DE BLOQUEOS
Bloque compartido(shared lock-s): Varias trasacciones lean un mismo recurso, ninguna puede
modificarlo mientras el blowueo este activo
Se utiliza para operaciones de lectura(select)
Bloqueo exclusivo(Exclusive lock-x): Solo una trasaccion puede acceder al recurso bloqueado y
puede leer y modificarlo
Impide que otras trasacciones lean o escriban en ese recurso
Se utiliza operaciones como INSERT, Update o Delete
GRANULARIDAD DEL BLOQUEO
De pequeño a mas grande
Bloqueo de Fila(row lock):
Bloquea una solafila de una tabla, se usa cuando una transacción modifica o lee una fila
especifica
Ventaja: máxima concurrencia(otros pueden trabajar con otras filas)
Riesgo: demasiadas filas bloqueadas pueden consumir mucha memoria
VEASE EJEMPLO
Bloqueo de pagina(page lock):
Bloquea ina paginade 8KB que contiene varias filas, se unas cuando se modifican muchas filas
en la mismsapgina
Ventaja: menos sobrecarga que bloquear fila x fila
Riesgo: Puede bloquear varias filas que no se pretendía bloquear
VEASE EJEMPLO
Bloqueo de tabla(table lock):
Bloquea toda la tabla, se usa en operaciones que afectan o escanean muchas filas(TRUNCATE,
ALTER, SELECT INTO)
Ventaja: Mas eficientes en algunos casos masivos
Riesgo: Impide que otros usuarios accedan a cualquier parte de la tabla.
VEASE EJEMPLO
Base de datos(database lock):
Se bloquea toda la base de datos, salvo en tareas de restauraciones, backups o ciertos
comandos administrativos.
NADIE PUEDE LEER NI ESCRIBIR EN NINGUNA TABLA MIENTRAS DURE
VEASE EJEMPLO
La gestión de bloqueo en SQLServer
Protege la integridad de los datos en entornos concurrentes
Utiliza diversos tipos dy niveles de bloqueo según la operación
Se controla mediante el LOCK MANAGER y se ve afectada por el nivel de aislamiento de las
transacciones
Se puede monitorear y optimizar para evitar bloqueos largos o deadlocks
SQL sever decide que nivel usar de forma dinámica
VEASE EJEMPLO
Problemas de concurrencia
INTERBLOQUEO(DEADLOCK):
Ocurre cuando dos trasacciones se bloquean entre si esperando recursos que la otra ya a
bloqueado
INANICION(STARVATION)
Una trasaccion no consigue acceso a los recursos por que siempre hay otras con mayor
prioridad
LECTURA SUCIO(DIRTY READ):
Una trasaccion lee datos que aun no han sido confirmadas por otra transacción(y podrían ser
revertidos)
Estrategias de prevención y recuperación de deadlocks
Deteccion de bloqueos: el sistema revisa periódicamente si existen ciclos en el grafo de espera
de bloqueos
Prevencion: asignar un orden global a los recursos o aplicar políticas como “Esperar-desechar”
Recuperacion: cancelar(rollback) una de las trasacciones involucradas