Compatibilidad de bloqueos (motor de base de datos)
La compatibilidad de bloqueos controla si varias transacciones pueden adquirir bloqueos sobre el mismo recurso a la vez. Si un recurso ya está bloqueado por otra transacción, solo se puede conceder una nueva solicitud de bloqueo si el bloqueo solicitado es compatible con el modo del bloqueo existente. Si el modo del bloqueo solicitado no es compatible con el bloqueo existente, la transacción que solicita el nuevo bloqueo espera a que se libere el bloqueo existente o a que expire el intervalo de tiempo de espera del bloqueo. Por ejemplo, ningún modo de bloqueo es compatible con bloqueos exclusivos. Mientras se mantiene un bloqueo exclusivo (X), ninguna otra transacción puede adquirir un bloqueo de ninguna clase (compartido, de actualización o exclusivo) en dicho recurso hasta que se libere el bloqueo exclusivo. Como alternativa, si se ha aplicado un bloqueo compartido (S) a un recurso, otras transacciones también pueden adquirir un bloqueo compartido o de actualización (U) en el elemento, aunque la primera transacción no haya terminado. Sin embargo, otras transacciones no pueden adquirir un bloqueo exclusivo si no se anula el bloqueo compartido.
En la tabla siguiente se muestra la compatibilidad de los modos de bloqueo más frecuentes.
|
Modo concedido existente |
|
|
|
|
|
---|---|---|---|---|---|---|
Modo solicitado |
IS |
S |
U |
IX |
SIX |
X |
Intención compartida (IS) |
Sí |
Sí |
Sí |
Sí |
Sí |
No |
Compartido (S) |
Sí |
Sí |
Sí |
No |
No |
No |
Actualizar (U) |
Sí |
Sí |
No |
No |
No |
No |
Con intención exclusiva (IX) |
Sí |
No |
No |
Sí |
No |
No |
Intención compartida exclusiva (SIX) |
Sí |
No |
No |
No |
No |
No |
Exclusivo (X) |
No |
No |
No |
No |
No |
No |
Nota
Un bloqueo con intención exclusiva (IX) es compatible con un modo de bloqueo IX, porque IX indica la intención de actualizar solamente algunas de las filas, no todas. También se permite que otras transacciones intenten leer o actualizar algunas filas, siempre y cuando no se trate de las mismas filas que están actualizando las demás transacciones. Además, si dos transacciones intentan actualizar la misma fila, se permitirá a ambas transacciones un bloqueo IX en el nivel de tabla y de página. Sin embargo, un bloqueo X en el nivel de fila solo se permitirá a una transacción. La otra transacción deberá esperar a que se quite el bloqueo en el nivel de fila.
Matriz de compatibilidad de bloqueos completa
Utilice la siguiente tabla para determinar la compatibilidad de todos los modos de bloqueo disponibles en Microsoft SQL Server.
Vea también