2008-08-21 22 views
6

¿Por qué debería o no debería usar las lecturas sucias:SQL Server - lecturas sucias Pros y Contras

set transaction isolation level read uncommitted 

en SQL Server?

+2

Análisis detallado aquí: [Selecciona bajo READ COMMITTED y REPEATABLE READ puede devolver resultados incorrectos] (http://www2.sqlblog.com/blogs/alexander_kuznetsov/archive/2009/04/10/selects-under-read- commit-and-repetatable-read-may-return-incorrect-results.aspx) y aquí: [The Case of the Skewed Totals] (http://www.simple-talk.com/sql/t-sql-programming)/the-case-of-the-skewed-totals /) –

Respuesta

14

de MSDN:

Cuando se establece esta opción, es posible leer datos no confirmados o sucio; los valores en los datos se pueden cambiar y las filas pueden aparecer o desaparecer en el conjunto de datos antes del final de la transacción.

En pocas palabras, cuando usa este nivel de aislamiento y realiza múltiples consultas en una tabla activa como parte de una transacción, no hay garantía de que la información que le sea devuelta en diferentes partes de la transacción permanece igual. Podría consultar los mismos datos dos veces en una transacción y obtener resultados diferentes (esto podría suceder en el caso en que un usuario diferente actualizara los mismos datos en medio de su transacción). Obviamente, esto puede tener graves ramificaciones para partes de su aplicación que dependen de la integridad de los datos.

6

Generalmente cuando necesita realizar consultas considerables (o frecuentes) a tablas ocupadas, donde las confirmaciones de lectura podrían estar bloqueadas por bloqueos de transacciones no confirmadas, pero SOLAMENTE cuando puede vivir con datos inexactos.

Como ejemplo, en un sitio web de juegos en el que trabajé recientemente había una visualización resumida de algunas estadísticas sobre juegos recientes, todo se basaba en lecturas sucias, era más importante para nosotros incluir y luego excluir los datos transaccionales aún no se ha comprometido (sabíamos de todos modos que pocas, o ninguna, transacciones se retirarían), sentimos que, en promedio, los datos serían más precisos de esa manera.

0

utilizarlo si desea que los datos de vuelta de inmediato y no es tan importante si es adecuado
No utilizar si si los datos es importante ser correcta o si se está haciendo actualizaciones con él

también echa un vistazo a el aislamiento de instantáneas que se ha introducido en SQL server 2005

-1

La cosa es cuando usted quiere leer los datos antes de comprometerse, podemos hacerlo con la ayuda de configurar el nivel de aislamiento de transacción no confirmado, los datos pueden, o no pueden cambiar.

Podemos leer los datos utilizando la consulta:

Select * from table_name with(nolock) 

Esto es aplicable a sólo lectura no comprometida nivel de aislamiento.

+0

Tenga cuidado al vincular a un sitio de terceros, ya que sería spam para Stack Overflow. Relacionar: [Cómo no ser un spammer] (http://stackoverflow.com/help/promotion). –