2010-05-11 10 views
5

Tengo un par de preguntas sobre bloqueos de actualización (U) y bloqueos exclusivos (X).Pregunta de bloqueo: bloqueo "U" frente a bloqueo "X"

1) ¿Tengo la certeza de que se coloca un bloqueo 'X' en un recurso cuando el recurso está a punto de actualizarse?

2) Estoy un poco confuso en los bloqueos U. ¿Estoy en lo cierto cuando se aplica un bloqueo U cuando se lee un recurso y SQL Server cree que podría necesitar actualizar el recurso más adelante? Si esto es correcto, ¿se aplicaría un bloqueo en "U" solo cuando se realiza una lectura dentro del contexto de una transacción? Supongo que estoy tratando de entender en qué circunstancias SQL Server cree que podría necesitar actualizar más tarde una fila que acaba de leer ahora.

Gracias - Randy

Respuesta

4

1) Estoy en lo cierto que el bloqueo de una 'X' se pone en un recurso cuando el recurso está a punto de ser actualizado?

Sí.

2) Estoy un poco confuso en U bloqueos. ¿Estoy en lo cierto cuando se aplica un bloqueo U cuando se lee un recurso y SQL Server cree que podría necesitar actualizar el recurso más adelante? Si esto es correcto, ¿se aplicaría un bloqueo en "U" solo cuando se realiza una lectura dentro del contexto de una transacción? Supongo que estoy tratando de entender en qué circunstancias SQL Server cree que podría necesitar actualizar más tarde una fila que acaba de leer ahora.

U cerraduras son compatibles con los bloqueos de lectura, pero no entre sí, X cerraduras no son compatibles incluso con los bloqueos de lectura.

U cerraduras son colocados por DML consultas (UPDATE, DELETE, MERGE), mientras que de exploración las filas de la tabla (sin decisión de actualizar está hecho todavía), mientras que X bloqueos se colocan cuando se tomó la decisión de actualizar la fila.

En el modo de aislamiento READ COMMITTED, los bloqueos de actualización se levantan después de que se haya evaluado dejar el registro tal como está, en modos de aislamiento superiores se guardan hasta el final de la transacción.

+0

@Quassnoi - Todavía estoy un poco confundido con las cerraduras en "U". ¿Cómo determina SQL Server que una fila que se acaba de leer podría actualizarse en el futuro? ¿Es porque la lectura se realizó dentro del contexto de una transacción? Estoy intentando determinar por qué a veces se usa un candado en U en lugar de un candado en "S". –

+1

@Randy: los bloqueos 'U' se usan para las consultas' DDL' ('UPDATE',' DELETE', 'MERGE',' SELECT FOR UPDATE'). 'S' bloqueos se utilizan para consultas de solo lectura (' SELECT') – Quassnoi

+0

@Randy: 'REPLACE ('DDL', 'DML')' en el comentario anterior – Quassnoi