2011-05-16 8 views
17

Sé que un bloqueo de teclas bloquea una tecla en un índice. Sin embargo, ¿qué significa "clave" en realidad?¿Qué recurso bloquea realmente un bloqueo de tecla?

Por ejemplo, si tengo un índice no agrupado en una columna de apellido e intento una actualización donde surname = "Jones", ¿efectivamente he bloqueado cada fila en la tabla donde el apellido es "Jones"? ¿O el índice se bloqueará en un nivel superior, lo que impedirá el acceso a las filas con apellidos que no sean "Jones"?

La razón que pido es esta nota en los libros en pantalla sobre Lock Granularidad y jerarquías:

CLAVE: Un bloqueo de registro dentro de un índice que se utiliza para proteger rangos de teclado en las transacciones serializables.

Esto sugiere una serie de llaves será bloqueado, no sólo uno.

+0

¿Las "transacciones serializables" significan que el nivel de aislamiento de la transacción está establecido en "serializable"? Porque cuando depuré un punto muerto, vi bloqueos de teclas en el nivel de aislamiento de "lectura confirmada". – kolobok

Respuesta

28

Un cerrojo afecta a todas las filas que coinciden con el predicado dado (tipo de) - en su ejemplo se verán afectadas todas las filas con surname = 'Jones'.

La palabra "rango" se usa porque, dependiendo del predicado, un rango de filas puede verse afectado, por ejemplo si el predicado era age > 18, entonces todas las filas donde la edad es mayor que 18 se verían afectadas.


También es importante entender que una cerradura de llave no bloqueo simplemente individualmente cada fila coincidente en el índice - tu ejemplo Keylock no sólo afecta a todas las filas existentes en el índice con el apellido "Jones", sino que también afecta cualquier intento de modificar una fila existente o insertar una nueva fila con el apellido "Jones".

Puede ayudar a pensar acerca de los bloqueos de una manera ligeramente diferente - cerraduras sólo tienen efecto cuando SQL Server intenta obtener otro bloqueo que puede ser incompatibles (es decir, no es legal tener dos cierres al mismo tiempo) Por ejemplo, si tiene un bloqueo de teclas exclusivo en filas con age > 18 e intenta insertar o modificar una fila con age = 42, SQL Server intentará primero obtener los bloqueos de relvant, ya que existe un bloqueo de clave existente para filas con age > 18 SQL El servidor determina que los bloqueos son incompatibles y toma la acción correspondiente.

+0

Muchas gracias Kragen, su respuesta lo deja en claro. –

Cuestiones relacionadas