tipos - Bloqueos de SQL Server explicados
unlock table sql server (4)
La página de SQL Server MSDN tiene una explicación razonable:
Un bloqueo de intención indica que SQL Server desea adquirir un bloqueo compartido (S) o un bloqueo exclusivo (X) en algunos de los recursos más abajo en la jerarquía. Por ejemplo, un bloqueo de intención compartida colocado en el nivel de la tabla significa que una transacción tiene la intención de colocar bloqueos compartidos (S) en páginas o filas dentro de esa tabla. Establecer un bloqueo de intención en el nivel de la tabla evita que otra transacción adquiera un bloqueo exclusivo (X) en la tabla que contiene esa página. Los bloqueos de intención mejoran el rendimiento porque SQL Server examina los bloqueos de intento solo a nivel de tabla para determinar si una transacción puede adquirir un bloqueo de manera segura en esa tabla. Esto elimina el requisito de examinar cada bloqueo de fila o página en la tabla para determinar si una transacción puede bloquear toda la tabla.
A continuación se muestra una lista de bloqueos que SQL Server 2000 debe admitir. Estoy un poco confundido en cuanto a lo que significan realmente los bloqueos "intencionales". He buscado en la Web y las respuestas parecen ser un poco crípticas.
Además de obtener una respuesta a mi pregunta específica, espero utilizar esta pregunta como Wiki para lo que significa cada bloqueo y bajo qué circunstancias se adquirirá ese tipo de bloqueo.
- Compartido (S)
- Actualización (U)
- Exclusivo (X)
- Intención
- intención compartida (IS)
- intención exclusiva (IX)
- compartido con intención exclusiva (SIX)
- actualización de intención (IU)
- intento de actualización exclusivo (UIX)
- actualización de intención compartida (SIU)
- Esquema
- modificación de esquema (Sch-M)
- estabilidad del esquema (Sch-S)
- Actualización a granel (BU)
- Rango de llaves
- Rango de clave compartido y bloqueo de recurso compartido (RangeS_S)
- Rango de claves compartidas y bloqueo de recursos de actualización (RangeS_U)
- Insertar rango de clave y bloqueo de recurso nulo (RangeI_N)
- Exclusivo rango de claves y bloqueo exclusivo de recursos (RangeX_X)
- Bloqueos de conversión (RangeI_S, RangeI_U, RangeI_X, RangeX_S, RangeX_U)
Los bloqueos de intención se colocan en el nivel de la tabla e indican que una transacción colocará bloqueos apropiados en algunas de las filas de la tabla.
Esto acelera la comprobación de conflictos para transacciones que necesitan colocar bloqueos en el nivel de la tabla. Por ejemplo, una transacción que necesita un bloqueo exclusivo en una tabla puede detectar el conflicto en el nivel de la tabla (el bloqueo "intención compartida" estará allí), en lugar de tener que examinar todas las filas (o páginas) para bloqueos compartidos.
Para obtener más información acerca de los niveles de aislamiento en SQL Server, incluidos los bloqueos y su impacto en la base de datos en detalle con ejemplos, consulte el siguiente enlace: http://www.sqllion.com/2009/07/transaction-isolation-levels-in-sql -servidor/
Otra característica importante de los bloqueos de Intent es que no los coloca explícitamente en el código, sino que se solicitan implícitamente cuando coloca un bloqueo no intencionado.