uncommitted transaction transacción transacciones sucia repeatable read_uncommitted read niveles nivel lectura las ejemplos desempeño cómo consistencia aislamiento afecta sql sql-server sql-server-2005

sql - transaction - CON(NOLOCK) CONTRA EL NIVEL DE AISLAMIENTO DE LA TRANSACCIÓN AJUSTADA LEÍDO SIN COMPROMISO



set transaction isolation level read uncommitted ejemplos (6)

¿Podría alguien darme alguna orientación sobre cuándo debo usar WITH (NOLOCK) en comparación con SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

¿Cuáles son los pros / contras de cada uno? ¿Hay alguna consecuencia no deseada con la que te hayas topado al usar una en lugar de la otra?


Como debe usar WITH (NOLOCK) para cada tabla, puede ser molesto escribirla en cada cláusula FROM o JOIN. Sin embargo, tiene una razón por la que se llama lectura "sucia". Entonces, realmente debería saber cuándo hace uno, y no establecerlo como predeterminado para el alcance de la sesión. ¿Por qué?

Olvidarse de un WITH (NOLOCK) puede no afectar su programa de una manera muy dramática, sin embargo, hacer una lectura sucia donde no quiere puede marcar la diferencia en ciertas circunstancias.

Por lo tanto, use WITH (NOLOCK) si se permite que los datos actuales seleccionados sean incorrectos, ya que podrían retrotraerse más tarde. Esto se usa principalmente cuando desea aumentar el rendimiento, y los requisitos en el contexto de la aplicación le permiten correr el riesgo de que se muestren datos incoherentes. Sin embargo, usted o alguien a cargo tiene que sopesar los pros y los contras de la decisión de usar WITH (NOLOCK).


Ellos son la misma cosa. Si utiliza la declaración de set transaction isolation level , se aplicará a todas las tablas en la conexión, por lo que si solo quiere un nolock en una o dos tablas, use eso; de lo contrario, usa el otro.

Ambos te darán lecturas sucias. Si estás de acuerdo con eso, entonces úsalos. Si no puede tener lecturas sucias, entonces considere snapshot o sugerencias serializable lugar.


No puede usar Establecer nivel de aislamiento de transacción. Lectura no confirmada en una vista (de hecho, solo puede tener un script allí), por lo que tendría que usar (bloqueo automático) si se deben incluir filas sucias.


Que yo sepa, la única diferencia es el alcance de los efectos, como dijo Strommy. NOLOCK insinúa sobre una mesa y LEE NO COMPROMETIDO en la sesión.

En cuanto a los problemas que pueden ocurrir, se trata de consistencia. Si le importa, tenga en cuenta que podría obtener lo que se denomina lecturas sucias que podrían influir en otros datos manipulados con información incorrecta.

Personalmente, no creo haber visto ningún problema con esto, pero eso puede deberse más a la forma en que uso nolock. Debe tener en cuenta que hay situaciones en las que se podrá utilizar. Escenarios en los que en su mayoría se agregan datos nuevos a una tabla, pero hay otro proceso que viene detrás para verificar un escenario de datos. Eso probablemente sea correcto ya que el flujo principal no incluye retroceder y actualizar filas durante una lectura.

También creo que en estos días debe consultar el Control de Concurrencia de varias versiones. Creo que lo agregaron en 2005 y ayuda a evitar que los escritores bloqueen a los lectores al brindarles a los lectores una instantánea de la base de datos que deben usar. Incluiré un enlace y dejaré más investigaciones al lector:

MVCC

Niveles de aislamiento de la base de datos