Bloquear el motor de base de datos

El bloqueo es el mecanismo que utiliza Microsoft SQL Server Database Engine (Motor de base de datos de SQL Server) para sincronizar el acceso por parte de varios usuarios al mismo elemento de datos simultáneamente.

Antes de que una transacción obtenga una dependencia del estado actual de un elemento de datos, como la lectura o modificación de los datos, debe protegerse de los efectos de otra transacción que modifica los mismos datos. Para ello, la transacción solicita un bloqueo en el elemento de datos. Los bloqueos disponen de diferentes modos, como compartido o exclusivo. El modo del bloqueo indica el nivel de dependencia que la transacción tiene sobre los datos. No se puede conceder a una transacción un bloqueo que genere un conflicto con el modo de un bloqueo ya concedido sobre unos datos a otra transacción. Si una transacción solicita un modo de bloqueo que cree un conflicto con otro bloqueo ya concedido sobre los mismos datos, la instancia de Motor de base de datos pausará la transacción que realiza la solicitud hasta que se libere el primer bloqueo.

Si una transacción modifica un elemento de datos, conserva el bloqueo que protege la modificación hasta el final de la transacción. El tiempo que una transacción conserva los bloqueos obtenidos para proteger operaciones de lectura depende de la configuración del nivel de aislamiento de la transacción. Todos los bloqueos de una transacción se liberan cuando ésta finaliza (se confirma o se revierte).

Por regla general, las aplicaciones no solicitan los bloqueos directamente. Una parte de Motor de base de datos, denominada administrador de bloqueos, es la que se encarga de administrar los bloqueos de forma interna. Cuando una instancia de Motor de base de datos procesa una instrucción Transact-SQL, el procesador de consultas de Motor de base de datos determina los recursos a los que se va a tener acceso. El procesador de consultas determina también qué tipos de bloqueos se necesitan para proteger cada recurso, basándose en el tipo de acceso y en la configuración del nivel de aislamiento de la transacción. A continuación, el procesador de consultas solicita los bloqueos adecuados al administrador de bloqueos. Éste concede los bloqueos si no existen bloqueos en conflicto de otras transacciones.

La siguiente tabla muestra los temas que describen los principales conceptos del bloqueo.

Tema

Descripción

Granularidad y jerarquías de bloqueo

Los bloqueos se pueden solicitar para diferentes tipos de recursos, como filas, páginas, índices, tablas o bases de datos. Algunas operaciones requieren que se incluyan bloqueos en varios niveles de granularidad, formando así una jerarquía de bloqueos.

Modos de bloqueo

Los bloqueos disponen de diferentes modos que especifican el nivel de acceso de otras transacciones al recurso bloqueado.

Compatibilidad de bloqueos (motor de base de datos)

Varias transacciones pueden obtener bloqueos simultáneos al mismo recurso si sus modos de bloqueo son compatibles. Si una transacción solicita un modo de bloqueo que entra en conflicto con un bloqueo existente, la transacción se pausa hasta que se libera el primer bloqueo.

Bloquear intervalos con clave

El bloqueo de un intervalo de claves permite que las transacciones se ejecuten con un nivel de aislamiento serializable para evitar inserciones y eliminaciones ficticias.

Concentración de bloqueos (motor de base de datos)

Si una transacción obtiene un gran número de bloqueos de fila o página, Motor de base de datos puede conceder un bloqueo de tabla y liberar todos los bloqueos de nivel inferior para reducir la sobrecarga de bloqueo.

Bloqueo dinámico

Motor de base de datos puede elegir de forma dinámica el nivel de granularidad del bloqueo basándose en la estimación del optimizador del número de filas al que va a hacer referencia una instrucción Transact-SQL.

Mostrar la información de bloqueo (motor de base de datos)

Motor de base de datos y sus API asociadas proporcionan varios mecanismos para mostrar información sobre los bloqueos actuales de una instancia o una base de datos.

Interbloqueos

Los interbloqueos se producen cuando dos tareas se bloquean permanentemente entre sí debido a que cada una bloquea un recurso que necesita la otra.