Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 19946|Respuesta: 3

[Fuente] Bloqueos de base de datos NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Copiar enlace]
Publicado en 14/1/2021 15:23:14 | | | |
NOLOCK
Cuando se selecciona esta opción, SQL Server lee o modifica los datos sin ningún bloqueo. En este caso, el usuario puede leer datos de una transacción no comprometida o de una reversión hacia atrás, conocido como "datos sucios".

CIERRE DE LA CÁMARA
Cuando se selecciona esta opción, SQL Server mantiene este bloqueo compartido hasta el final de toda la transacción sin liberarlo en el camino.

ACTUALIZACIÓN
Cuando se selecciona esta opción, SQL Server utiliza un bloqueo de modificación en lugar de un bloqueo compartido al leer datos y mantiene este bloqueo hasta el final de toda la transacción o comando. Esta opción garantiza que varios procesos puedan leer datos al mismo tiempo, pero solo ese proceso puede modificar los datos.

TABLOCK
Cuando se selecciona esta opción, SQL Server colocará un bloqueo compartido en toda la tabla hasta que termine el comando. Esta opción garantiza que otros procesos solo puedan leer los datos y no modificarlos.

PAGLOCK
Esta opción es la predeterminada y, cuando se selecciona, SQL Server utiliza un bloqueo de página compartida.

TABLOCKX (Bloqueo de Mesa Exclusivo)
Cuando se selecciona esta opción, SQL Server colocará un bloqueo en toda la tabla hasta que termine el comando o la transacción. Esto evitará que otros procesos lean o modifiquen los datos de la tabla.

HOLDLOCK mantiene el bloqueo compartido hasta que se complete toda la transacción y debe liberarse tan pronto como el objeto bloqueado no sea necesario, igual al nivel de aislamiento de transacciones SERIALIZABLE

La instrucción NOLOCK se ejecuta sin emitir un bloqueo compartido, permitiendo lecturas sucias, que es igual al nivel de aislamiento de transacciones READ UNCOMMITTED

PAGLOCK utiliza múltiples bloqueos de página donde se usa un bloqueo de tabla

READPAST permite al servidor SQL saltar líneas bloqueadas y ejecutar transacciones, y para niveles de aislamiento de transacciones READ NO comprometidos, solo saltar bloqueos de RID, no bloqueos de página, zona y tabla

ROWLOCK impone el uso de rowlocks

TABLOCKX impone el uso de un bloqueo exclusivo a nivel de tabla, que impide que cualquier otra transacción utilice la tabla durante la transacción

UPLOCK obliga a usar actualizaciones al leer una tabla sin un bloqueo compartido

Nota: La diferencia entre bloquear una tabla en una base de datos
SELECT * FROM table WITH (HOLDLOCK) Otras transacciones pueden leer la tabla, pero no pueden actualizarlas ni eliminar
SELECT * FROM table WITH (TABLOCKX) Otras transacciones no pueden leer, actualizar ni eliminar tablas




Anterior:Pantalla de doble pantalla para escritorio remoto de Win10
Próximo:.NET/C# Crear cuenta de monedero ETH y contraseña de verificación basada en Nethereum [con código fuente]
 Propietario| Publicado en 14/1/2021 16:53:24 |
Prueba el bloqueo TABLOCKX

El sql de prueba es el siguiente:


Probando el código C#:


Descubrimiento,Toda la tabla está bloqueada y los datos solo pueden consultarse cuando se ejecuta la transacción, como se muestra en la figura siguiente:



Elimina WITH(TABLOCKX) y solo actualiza los datos con ID 1, la prueba es la siguiente:



Como la Tarea 2 y la Tarea 4 no implican datos con id 1, la consulta es muy rápida, y la 3 y la 4 deben esperar a que la transacción se complete antes de consultar.

Comportamiento al modificar datos

En una transacción de lectura comprometida que utilice versionado de filas, selecciona las filas a actualizar mediante un escaneo bloqueador, donde se aplica un bloqueo de actualización (U-lock) a la fila de datos cuando se lee el valor de los datos. Esto es lo mismo que una transacción de lectura comprometida que no utiliza versionado de línea. Si una fila de datos no cumple los criterios de actualización, se libera un bloqueo de actualización en esa fila y la siguiente fila se bloquea y escanea.

Bloqueo de actualización (U): Un modo de bloqueo que previene los bloqueos, donde dos transacciones leen primero un recurso de datos. En caso de modificación, el uso de bloqueos compartidos y exclusivos a veces provoca bloqueos, mientras que el uso de bloqueos de actualización puede evitar la ocurrencia de estos bloqueos. El bloqueo de actualización del recurso solo puede asignarse a una transacción a la vez, y si el recurso necesita modificarse, el bloqueo de actualización se convierte en un bloqueo exclusivo, de lo contrario pasa a ser un bloqueo compartido.

El inicio de sesión del hipervínculo es visible.

 Propietario| Publicado en 28/1/2021 17:30:51 |
Emitir:

udpate a
conjunto columna1 = 1
donde idx = 1
Cuando sqlserver ejecuta la instrucción update, bloquea toda la tabla

Análisis:

Estructura de reloj,Sin una llave primaria, no puedes bloquear solo las filas
 Propietario| Publicado en 2/5/2023 11:47:24 |
Optimización de consultas del Entity Framework WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com