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: 12282|Respuesta: 0

[Fuente] SQL Server establece el nivel de aislamiento de transacciones

[Copiar enlace]
Publicado en 5/2/2021 11:53:34 | | | |
Optimización de consultas del Entity Framework WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

Bloqueos de base de datos NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
El nivel de aislamiento de las transacciones en SQL Server y su relación con lecturas sucias, lecturas no repetibles, lecturas fantasma, etc. (argumentos de código y secuencias temporales)

Entendiendo estos problemas que pueden surgir en el caso de acceso concurrente a la base de datos, podemos seguir entendiendo el concepto de nivel de aislamiento de la base de datos, en términos sencillos: ¿cómo se quiere aislar las transacciones concurrentes y en qué medida? Por ejemplo, si se toleran lecturas sucias, o si no quieres que las transacciones concurrentes tengan lecturas sucias, entonces estas pueden configurarse al nivel de aislamiento para que el aislamiento entre transacciones concurrentes sea laxo o grave.

Cuanto mayor es el nivel de aislamiento, menor es la probabilidad de leer datos sucios o incompletos, pero mayor es la degradación del rendimiento en sistemas de alta concurrencia. Cuanto menor sea el nivel de aislamiento, mayor será la mejora de rendimiento en el sistema concurrente, pero los datos en sí pueden estar incompletos.

En SQL Server 2012, puedes establecer el nivel de aislamiento de una transacción (de bajo a alto) usando esta sintaxis:

ESTABLECER NIVEL DE AISLAMIENTO DE TRANSACCIONES
    { LEER SIN COMPROMETERSE
    | LEER COMPROMETIDO
    | LECTURA REPETIBLE
    | INSTANTÁNEA
    | SERIALIZABLE
    }
[ ; ]
Primero, crea un nuevo script de prueba, crea una base de datos e inserta los datos de prueba, de la siguiente manera:



Crear una nueva ventana A, abre una transacción, realiza la operación de actualización y espera 10 segundos antes de comprometer, el código es el siguiente:

Crear una nueva ventana B, establece la transacción READ UNCOMMITTED (lectura no confirmada, el nivel más bajo, el problema fácil es la lectura sucia, porque puede leer los datos modificados por otras transacciones pero no comprometidos). Hace lo mismo que configurar (NOLOCK) en la tabla de objetos de la sentencia SELECT en una transacción. Consulta los datos, el código es el siguiente:

Crear una nueva ventana C, consulta directamente los datos, de la siguiente manera:

A su vez,Ejecuta ventanas A, B y C, y descubre que al actualizar datos, la ventana B puede devolver datos inmediatamente (Es posible que la lectura sea un dato corrupto), la ventana C necesita esperar a que la ventana A termine de ejecutarsedevolverá los datos, como se muestra en la figura siguiente:


(Ventana B)


(Ventana C)

(Fin)





Anterior:Diferencia de persistencia de Redis entre RDB y AOF
Próximo:MySQL exporta los resultados de la consulta a un archivo
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