Skip to content

Tipos de Bloqueos en SQL Server

El término «Locking» en inglés que muchas veces traducimos como «Bloqueo» al español (que personalmente creo que nos lleva a un malentendido de conceptos), en realidad nos referencia a la protección de información sobre objetos, en los que consideramos diferentes transacciones u operaciones en una Base de Datos.

Estos términos inmediatamente nos llevan a recordar sobre las propiedades de una unidad de trabajo: Atomicidad, Consistencia, Aislamiento y Durabilidad (ACID). Esto lo dejaremos para otra oportunidad, ahora a lo que vinimos. Los Tipos de Bloqueos.

PARA ENTENDER MEJOR UN LOCK

Un Lock se presenta como un mecanismo de protección para sincronizar el acceso de múltiples usuarios a la misma porción de datos. El modo (o tipo) de Lock, define el nivel de dependencia que la transacción tiene sobre el dato.

Debemos considerar dos aspectos principales cuando hablamos de Locks: Modos y Granularidad

MODOS DE LOCKS – un poco de teoría

LOCK MODEGENERADO EN...
Shared (S)Operaciones de lectura que no cambian ni actualizan datos
Update (U)Recursos que pueden ser actualizados. Previene deadlocks en concurrencia que lee datos, genera Locks y actualiza posteriormente
Exclusive (X)Operaciones de modificación de datos como UPDATE, DELETE o INSERT. Previene actualizaciones simulátaneas en el mismo recurso al mismo tiempo
IntentEstablece una jerarquía de Lock
SchemaUna operación dependiente de un Schema de una tabla donde se está generando una ejecución
Bulk Update (BU)Operación de Bulk para población de datos en una tabla y el "HINT" TABLOCK es especificado

GRANULARIDAD DEL LOCK – lo más importante a analizar

Una transacción puede generar un Lock de diferente tipo para minimizar el costo que representa sobre el recurso.

Generar el Locking a una granularidad menor incrementa la concurrencia, sin embargo como es de esperarse, hacerlo significa una mayor carga por la cantidad de Locks necesarios.

Al contrario es similar, un Lock más grande tiene menor carga operativa pero disminuye la concurrencia.

Este el trabajo que realiza SQL Server en función a las operaciones que va atendiendo. Los niveles de granularidad son varios, sin embargo a continuación detallaré algunos de ellos.

RECURSODESCRIPCIÓN
RIDLock a una fila de una tabla heap
KEYLock a un índice para proteger la llave en tranasacciones
PAGELock a una página de 8KB de datos o de índice
TABLELock a una tabla entera con datos e índices
DATABASELock a la base de datos completa

El detalle es mucho más extenso en la documentación oficial.

Lo que es importante tener en mente es que la protección que nos dan los Locks respecto a la integridad de nuestra información pueden tener un costo asociado y nuestro trabajo es darle la velocidad necesaria a nuestros programas para mantener su eficiencia.

CONSIDERACIONES IMPORTANTES

  • Decir «Bloqueo» va más allá de pensar en algo malo dentro de las Bases de Datos. Este es un concepto errado
  • Los Locks nos garantizan la integridad de nuestros Datos
  • El Testing de nuestros desarrollos es vital, simulando concurrencia. Si no lo hacemos simulando un escenario real, difícilmente se evidencian factores como estos y siempre escucharemos la frase «…pero funcionaba en Desarrollo».
  • El monitoreo de nuestros servidores nos ayudará a comprender qué tipos de Locks se están generando y si ello está dentro de una actividad normal o si nos está causando algún cuello de botella.
  • Entender los tipos de bloqueos es aquello que nos llevará a saber cómo reaccionar ante cualquier escenario que involucre locks.

Finalmente no te olvides entender Qué significa NOLOCK en SQL Server.

www.datoptim.com
I love working on SQL Server Performance Tuning and finding the origin of the problems. Music and SQL Server passionate.

Carrito
Volver arriba