Tipo de bloqueo de SQL del servidor y el uso (reimpresión)

I. ¿Por qué introducir bloqueo de

múltiples usuarios para llevar simultáneamente las siguientes operaciones de emisión de inconsistencia de datos de base de datos simultáneas:

actualización perdida
A, B dos usuarios leer los mismos datos y cambios de maquillaje, que modifican los resultados de un usuario romper otro como resultado de los cambios, como el sistema de reservas

sucia leer
un conjunto de datos de usuario modificados, y el usuario B a continuación, lee los datos, pero por alguna razón el usuario a para cancelar la modificación de los datos, los datos de restaurar el valor original, los datos B obtenido en este momento y genera los datos en la base de datos inconsistentes

no repetible leer
un dato de usuario de lectura, el usuario lee los datos B y modificar, cuando los dos son valores inconsistentes antes y después del usuario encontrado los datos re-leer un

método de control de concurrencia primario es bloqueo de bloque que evita que los usuarios hacen ciertas operaciones en un período de tiempo a incoherencia de datos evitar

dos de bloqueo libre de

cerraduras categoría incluye dos sub-método:

1. desde el punto de base de datos de vista del sistema: bloqueo exclusivo en (es decir, exclusivamente, lock), bloqueos compartidos y bloqueos de actualización

de MS-SQL Server utiliza el siguiente modo de bloqueo de recurso.

el modo de bloqueo se describe
compartido (S) no se utiliza para cambiar o actualizar los datos de la operación (sólo lectura operación), como una instrucción SELECT.
Actualización (U) por los recursos renovables. Cuando impedir forma común de varias sesiones de lectura, de bloqueo, y luego actualizar potencialmente estancamiento recursos.
Exclusivo (X) para las operaciones de modificación de datos, tales como INSERT, UPDATE o DELETE. El mismo recurso al mismo tiempo asegurar que ninguna múltiples actualizaciones.
bloqueos de intención utilizan para establecer una jerarquía de bloqueos. tipos de bloqueos de intención: intención compartidos (IS), exclusivo intención (IX), y compartidas con la exclusiva intención (seis).
bloqueos de esquema utilizado para realizar la operación depende del esquema de una tabla. tipos de bloqueo Arquitectura: modificación del esquema (Sch-M) y estabilidad esquema (Sch-S).
Actualización masiva (BU), utilizando los datos de copia a la mesa y especificar el TABLOCK masa del sistema.

bloqueo compartido
compartida (S) cerraduras permiten transacciones simultáneas para leer (SELECCIONAR) un recurso. Cuando la presencia de (S) bloqueo compartido en un recurso, ninguna otra transacción puede modificar los datos. Una vez que los datos han sido leídos, se libera inmediatamente la (S) bloqueo compartido en el recurso, a menos que el nivel de aislamiento se establece en la lectura repetible o superior, o el uso compartido dentro de la (S) de bloqueo de la vida de transacciones de reserva toque ciclo de bloqueo.

bloqueo de actualización
de actualización (U) es generalmente en forma de bloqueos prevenir callejón sin salida. Transacción consiste generalmente en un modo de actualización de la composición, el registro de la transacción se lee, la adquisición de un recurso compartido (página o fila) (S) de la cerradura, y luego modificar la línea, lo que requiere la conversión de bloqueo a un exclusivo (X) del pestillo. Si dos transacciones adquirieron bloqueo en modo compartido en el recurso, y luego tratar de actualizar datos, un intento de transacción para la conversión a un bloqueo (X) bloqueo exclusivo. Compartiendo la conversión de modo que el bloqueo exclusivo debe esperar un período de tiempo, porque la cerradura de otro modo las transacciones cuota de bloqueo exclusivo incompatibles una transacción; se produce de espera de bloqueo. El segundo intento de transacción para adquirir un bloqueo exclusivo (X) para ser actualizados. Dado que las dos transacciones deben ser convertidos a un exclusivo (X) de enganche, y espera para otra transacción cada libera de transacción cerraduras modo compartido, por lo tanto interbloqueo se produce.

Para evitar este posible problema de interbloqueo, utilice la actualización de bloqueo (T). Sólo una transacción puede obtener la actualización recurso de bloqueo (T). Si la transacción para modificar el recurso, la conversión de actualización (U) de bloqueo a una (X) bloqueo exclusivo. De lo contrario, bloquear en un bloqueo compartido.

Exclusivos bloqueo
exclusivo (X) evita el bloqueo transacciones simultáneas de acceso al recurso. Ninguna otra transacción puede modificar o leer exclusiva (X) cerraduras de datos.

bloqueos de intención
bloqueo con intención indica que SQL Server requiere algunos recursos subyacentes en la jerarquía de adquirir una (S) bloqueo compartido o bloqueo exclusivo (X). Por ejemplo, colocado en el nivel de bloqueo con intención compartido mesa en la intención de indicar que la tabla de transacciones página compartida o se coloca fila (S) de bloqueo. Se proporciona a los evita el bloqueo intención nivel de tabla otra transacción comprende entonces la obtención exclusiva en que la tabla de páginas (X) de bloqueo. bloqueos de intención de mejorar el rendimiento porque SQL Server sólo comprueba bloqueo de intención en el nivel de tabla para determinar si una transacción puede adquirir con seguridad un bloqueo en la tabla. Sin tener que comprobar cada fila de los bloqueos de tabla en cada página o para determinar si una transacción puede bloquear toda la tabla.

Los bloqueos de intención incluyen intención compartida (IS), exclusiva intención (IX), y compartido con la exclusiva intención (SEIS).

el modo de bloqueo se describe
cuota de intención (IS) mediante la colocación de los respectivos bloqueos S en el recurso, lo que indica que la transacción está destinado parte de lectura (pero no todos) de la jerarquía de recursos subyacente.
exclusiva Intención (IX) mediante la colocación de cada uno de la cerradura X sobre el recurso, lo que indica que la intención es modificar la parte de la jerarquía de transacción (pero no todos) los recursos subyacentes. IX es un superconjunto de IS.
Compartida con la exclusiva intención (los seis) mediante la colocación de una cerradura en cada uno de los recursos IX, muestran que la intención es leer toda la jerarquía de recursos operación subyacente y modificar algunos (pero no todos) los recursos subyacentes. Permitir bloqueos es concurrente en el recurso de nivel superior. Por ejemplo, la colocación de una tabla de bloqueo de bloqueo SEIS SEIS (bloqueo permite es concurrente) en la tabla anterior, IX cerraduras coloca en la página actual que está siendo modificado (bloqueo de X se coloca en la línea ha sido modificado). Aunque cada recurso dentro de un período de tiempo único SEIS bloqueo para evitar que otras transacciones de actualización de los recursos, pero permite otras operaciones de leer la jerarquía de recursos subyacente mediante la obtención de un bloqueo a nivel de tabla.

bloqueo exclusivo: sólo permite que el programa utilice la operación de bloqueo, no se aceptarán ninguna otra operación sobre la suya. Cuando se realiza un comando de actualización de datos, SQL Server utilizará automáticamente un bloqueo exclusivo. Cuando existen otros de bloqueo en el objeto, que no se extiende su bloqueo exclusivo.
bloqueos compartidos: recursos compartidos cerraduras pueden ser leídos por otros usuarios, pero otros usuarios no pueden modificarlo, en la implementación de Selección, SQL Server se dirigirá a los bloqueos compartidos.
Bloqueos de actualización: Cuando esté listo para actualizar los datos de SQL Server, primera actualización de datos de objetos como cerraduras, por lo que los datos no se pueden modificar, pero se puede leer. Cuando SQL Server determina los datos que se actualizan hasta que la operación, que se actualizará automáticamente bloqueo a un cambio bloqueo exclusivo, cuando hay existen otros de bloqueo sobre un objeto, no puede bloquear además de actualizaciones.

2. Desde el punto de vista de un programador: divididos en bloqueo optimista y pesimista.
El bloqueo optimista: confiar plenamente en la base de datos para gestionar el trabajo cerraduras.
Bloqueo pesimista: manija de bloqueo en el programador para gestionar los datos u objeto.

MS-SQLSERVER entre los usuarios realizan simultáneamente utilizando un bloqueo modificado en una base de datos implementados control de concurrencia pesimista en una pluralidad de

granularidad tres cerradura
de bloqueo tamaño granularidad del objetivo está bloqueada, el bloqueo de pequeño tamaño de partícula alta concurrencia, pero la sobrecarga es grande tamaño de bloque concurrencia baja sobrecarga pequeña, pero

con el apoyo de granularidad de bloqueo de SQL Server puede dividirse en filas, páginas, llaves, rangos de teclado, los índices, de mesa o adquirir de base de datos cerraduras

descripción de recursos
fila RID identificador. Para la fila de bloqueo individual de la tabla.
índice de clave de bloqueo de fila. Se puede utilizar para proteger rango de teclas de transacciones de serie.
Página 8 kilobytes (KB) de datos o página de índice.
Un grupo de ocho datos extents adyacentes o configuración de página de índice.
Tabla de la tabla entera, incluyendo todos los datos e índices, entre ellos.
base de datos DB.

Cuatro de bloqueo de la duración del tiempo

de la longitud del tiempo de duración de los bloqueos de guardia celebradas durante el tiempo necesario para el nivel de los recursos solicitados.

Para los bloqueos compartidos para proteger la operación de lectura del tiempo de mantenimiento depende del nivel de aislamiento de transacción. Cuando se utiliza el nivel de aislamiento READ transacción confirmada predeterminada, sólo un control de bloqueo compartido durante la lectura de la página. En la exploración, hasta conseguir en la página siguiente de la exploración cuando el cierre de liberación. Si especifica HOLDLOCK consejo o aislamiento de transacción nivel se ajusta a REPETIBLE READ o SERIALIZABLE, a continuación, hasta el final de la transacción sólo se libera el bloqueo.

De acuerdo con las opciones establecidas para el cursor de bloqueo del cursor de desplazamiento concurrente puede ser adquirido en modo compartido para proteger la extracción. Cuando la necesidad de bloqueo de desplazamiento, hasta la próxima extracción o cursor cerrada (lo que ocurra primero), cuando la liberación de bloqueo de desplazamiento. Sin embargo, si especifica HOLDLOCK, que no se libera hasta el final del bloqueo de desplazamiento transacción.

bloqueo exclusivo para proteger actualizada no se libera hasta el final de la transacción.
Si un intento de conexión a obtener un bloqueo, pero la cerradura está conectado con otros conflictos de bloqueo controlados, que está tratando de adquirir el bloqueo bloqueará las conexiones a:

el desbloqueo del conflicto y las conexiones para obtener el bloqueo solicitado.

Tiempo de espera de conexión intervalo ha expirado. Sin tiempo de desbordamiento por defecto, pero algunas aplicaciones para configurar el intervalo de tiempo de espera para evitar una espera indefinida

cinco bloqueos en SQL Server personalizada

1 estancamientos mango y el establecimiento de prioridades estancamiento

estancamiento es el bloqueo de múltiples usuarios aplicar diferentes, porque el solicitante pero todos tienen el derecho de bloquear parte del bloque de la sección de espera que otros usuarios han causado espera interminable

puede utilizarse para controlar la sesión de manera DEADLOCK_PRIORITY reacción SET cuando se produce un punto muerto. Si dos procesos se bloquean los datos, y hasta que el otro proceso libera sus bloqueos, cada proceso para liberar su bloqueo, un callejón sin salida que está sucediendo.

2 y el proceso para establecer la duración del temporizador de tiempo de espera de bloqueo.

@@ LOCK_TIMEOUT devuelve el bloqueo de sesión actual se establece actualmente milisegundos de tiempo de espera

Parámetro AJUSTE LOCK_TIMEOUT permite que la instrucción de recurso configuración de la aplicación bloqueada espera el tiempo más largo. Cuando la declaración es mayor que el ajuste de LOCK_TIMEOUT de espera, el sistema automáticamente los estados desbloqueado, y vuelve al programa de aplicación "ha superado el tiempo de espera de solicitud de bloqueo" mensaje de error 1222

ejemplares
periodo de tiempo de espera de bloqueo de realización está fijado en 1.800 milisegundos.
LOCK_TIMEOUT 1800 SET

3) Establecer el nivel de aislamiento.

4) para SELECT, INSERT, UPDATE y DELETE utilizando un nivel de tabla sugerencias de bloqueo.

5) de bloqueo índice de configuración granularidad
se puede utilizar para sistema sp_indexoption procedimiento almacenado proporcionado para la indexación de la granularidad de bloqueo

seis vista cerradura información

una ejecución de bloqueo EXEC sp_lock información del informe
2 Analizador de consultas de prensa Ctrl + 2 se puede ver la cerradura información

precauciones siete

cómo evitar puntos muertos
al utilizar una transacción, la lógica de procesamiento de transacciones minimizar el temprano cometer o retrotraer transacciones;
2 interbloqueo parámetro de tiempo de espera conjunto a un rango razonable, tales como: 3 minutos a 10 minutos; tiempo durante, renuncia a esta operación, para evitar el proceso de suspensión;
3 optimizador, cheque y el fenómeno de evitar un punto muerto;
4. prueban cuidadosamente todos los scripts y mosto de SP, antes de que sea puesta en libertad.
5 SP debe tener toda la gestión de errores (por @error)
6 niveles generalmente de no modificar las transacciones de SQL Server predeterminada. No recomiendo fuerza de bloqueo

para resolver el problema de cómo cerrar las filas en la tabla de base de datos

Ocho temas relacionados con varias cerraduras

1 cómo bloquear una fila determinada de la tabla

TRANSACCIÓN la AISLAMIENTO el nivel que la lectura no comprometida SET

SELECT * WHERE ID = ROWLOCK la DE 1 Tabla.

2 una tabla de base de datos bloqueada

SELECT * FROM tabla CON (HOLDLOCK)

instrucción lock:
Sybase:
Actualización de tabla WHERE col1 = col1 1 SET = 0;.
MSSQL:
SELECT col1 de la tabla (TABLOCKX) WHERE 1 = 0;.
Oracle:
el bloqueo de tabla tabla EN MODO EXCLUSIVO;
los demás bloquear inoperable hasta que el usuario desbloquea el bloqueo, desbloqueo confirmación o retrotracción


algunos ejemplos ayudan a impresionar
tabla1 dispuestos (A, B, C)
el ABC
A1 C1 B1
A2 B2 C2
A3 B3 C3

. 1) bloqueo exclusivo en
la nueva conexión de dos
la siguiente declaración en la primera conexión
al comenzar Tran
actualización tabla1
conjunto a = 'AA'
DONDE = B 'B2'
WAITFOR retardo '00: 00: 30 '- Espere 30 segundos
commit tran
declaración siguiente en la segunda conexión
Tran el inicio
SELECT * FROM tabla1
WHERE = B 'B2'
el commit tran

al ejecutar simultáneamente las dos declaraciones, la consulta de selección debe esperar para realizar la actualización ha terminado es decir, esperar 30 segundos

2) Bloqueo cuota de
la siguiente declaración en la primera conexión
tran el inicio
* Seleccione una de las holdlock -holdlock tabla1 bloqueo humana
DONDE = B 'B2'
WAITFOR retardo '00: 00: 30 '- Espere 30 segundos
commit tran

declaración siguiente en la segunda conexión
del comienzan Tran
SELECT a, de C tabla1
WHERE = B 'B2'
actualización tabla1
conjunto a = AA ''
DONDE = B 'B2'
el commit tran

al ejecutar simultáneamente las dos declaraciones, la consulta de selección segunda conexión puede llevar a cabo
la operación de actualización debe esperar a que la primera bloqueo compartido se libera en el bloqueo exclusivo para ejecutar, es decir, esperar 30 segundos

3) Punto muerto
tabla2 adicional (D,E)
DE
D1 E1
D2 E2
ejecutando la siguiente sentencia en la primera conexión
al comenzar Tran
actualización tabla1
A = SET 'AA'
DONDE = B 'B2'
WAITFOR retardo '00: 00: 30 '
Actualización Tabla 2
SET D =' d5 de '
donde E =' E1 '
el commit tran

siguiente declaración en la segunda conexión
del comienzan Tran
actualización Tabla2
D = SET 'd5 de'
donde e = 'E1'
WAITFOR retardo '00: 00: 10 '
actualización tabla1
SET a =' AA '
DONDE = B' B2 '
el commit tran

realiza simultáneamente, el sistema detectará un punto muerto, y abortar el proceso

añadir lo siguiente:
soporte SQL Server2000 de nivel de tabla sugerencias de bloqueo

de retención HOLDLOCK bloqueos compartidos hasta que se complete la transacción completa, deben ser liberados inmediatamente cuando no necesita el objeto que va a bloquear, igual que el aislamiento de transacciones SERIALIZABLE nivel

comunicado NOLOCK no emite los bloqueos compartidos cuando se ejecutan, permiten lecturas sucias , equivalente a la lectura no confirmada nivel de aislamiento

PAGLOCK con varias páginas usar una tabla de bloqueo bloqueos en lugar

READPAST dejó servidor SQL omitir las filas cerradas, la subdivisión de control de lectura no confirmada a nivel de aislamiento simplemente ignorar el bloqueo de RID, no se salte las páginas y una región de bloqueo de tabla

fila ROWLOCK cerraduras cumplir

TABLOCKX obligado a utilizar bloqueo de tabla exclusivo que impide cualquier otra transacción durante una transacción utilizando esta tabla

fuerzas cerrojo lectura del medidor se utiliza la actualización en lugar de un bloqueo compartido

bloqueo de la aplicación:
bloqueo de la aplicación es la generación de código de cliente de esclusas, en lugar de SQL Server la cerradura en sí genera

dos durante el procesamiento de la cerradura de la aplicación

de recursos de aplicaciones de bloqueo sp_getapplock

sp_releaseapplock recursos de desbloqueo para la aplicación

Nota: el bloqueo de una mesa en la diferencia de base de datos

SELECT * FROM tabla otras operaciones con (HOLDLOCK) puede leer la tabla, pero no se puede actualizar eliminar

SELECT * FROM tabla otras operaciones con (TABLOCKX) no puede leer la tabla, actualizar y borrar

Supongo que te gusta

Origin www.cnblogs.com/lichenghong/p/12449542.html
Recomendado
Clasificación