Saltar al contenido

¿Cuál es (son) la diferencia entre NOLOCK y UNCOMMITTED?

Luego de tanto luchar ya encontramos el resultado de este conflicto que algunos lectores de esta web tienen. Si tienes alguna información que compartir puedes dejar tu información.

Solución:

NOLOCK: Es equivalente a READ UNCOMMITTED (fuente : MSDN)

NOLOCK o READ UNCOMMITTED Especifica que se permiten lecturas sucias. No se emiten bloqueos compartidos para evitar que otras transacciones modifiquen los datos leídos por la transacción actual, y los bloqueos exclusivos establecidos por otras transacciones no impiden que la transacción actual lea los datos bloqueados. Permitir lecturas sucias puede causar una mayor simultaneidad, pero a costa de leer modificaciones de datos que luego son revertidas por otras transacciones.

READ UNCOMMITTED y NOLOCK las sugerencias solo se aplican a los bloqueos de datos. Todas las consultas, incluidas las with READ UNCOMMITTED and NOLOCK sugerencias, adquirir bloqueos Sch-S (estabilidad del esquema) durante la compilación y la ejecución. Debido a esto, las consultas se bloquean cuando una transacción simultánea mantiene un bloqueo Sch-M (modificación de esquema) en la tabla.

Debajo del capó están realizando la misma acción.

El READ UNCOMMITTED El nivel de aislamiento es el nivel de aislamiento menos restrictivo dentro de SQL Server, que también lo hace popular para los desarrolladores cuando buscan reducir el bloqueo.

El NOLOCK La sugerencia de tabla detrás de escena realiza exactamente la misma acción que ejecutar bajo el nivel de aislamiento de lectura no confirmada.

Elúnica diferencia entre los dos es que el READ UNCOMMITTED El nivel de aislamiento determina el mecanismo de bloqueo para toda la conexión y el NOLOCK la sugerencia de tabla determina el mecanismo de bloqueo de la tabla a la que le da la sugerencia.

No hay diferencia en cuanto a sus funciones, como otros han mencionado.

La única diferencia es que puede aplicar WITH(NOLOCK) selectivamente, en algunas mesas pero no en otras. READ UNCOMMITTED se aplica NOLOCK a todas las tablas en una sesión.

Si haces esto:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SELECT *
FROM Table1 T1
INNER JOIN Table2 T2 ON T1.ID = T2.id

Es funcionalmente equivalente a:

SELECT *
FROM Table1 T1 WITH(NOLOCK)
INNER JOIN Table2 T2 WITH(NOLOCK) ON T1.ID = T2.ID

Pero también puedes aplicar WITH(NOLOCK) selectivamente:

SELECT *
FROM Table1 T1 WITH(TABLOCK)
INNER JOIN Table2 WITH(NOLOCK) ON T1.ID = T2.ID

Si te gusta este mundo, eres capaz de dejar una noticia acerca de qué le añadirías a este post.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *