Nivel de aislamiento de transacción, lectura sucia, lectura mágica, lectura no repetible

Nivel de aislamiento de transacción, lectura sucia, lectura mágica, lectura no repetible

Lectura sucia

Lectura sucia significa que cuando una transacción está accediendo a los datos y los datos se modifican, y la modificación no se ha confirmado, los datos son leídos y utilizados por otra transacción. Esta es una lectura sucia.

Por ejemplo, el salario de Zhang San es 200, y la transacción A cambia el salario de Zhang San a 300, pero cuando no se envía la transacción A, la transacción B lee los datos de salario de Zhang San y luego cómo deshacer el error de la transacción A En este caso, los datos obtenidos por la transacción B son equivalentes a datos inexistentes, es decir, datos basura.

No repetible

Lectura no repetible, lo que significa que una transacción A lee los mismos datos varias veces, pero la transacción aún no ha terminado y otra transacción B también accede a estos datos, pero si la transacción B modifica los datos, entonces la transacción A Los datos leídos varias veces no coincidirán. Los mismos datos tienen valores diferentes. Los datos leídos varias veces son diferentes, por lo que se llama lectura no repetible

Por ejemplo, la transacción A, que lee el salario de Zhang San es 200, planea leer los datos del segundo salario, y la transacción B cambia el salario a 300, luego los datos leídos en la transacción A son inconsistentes, lo que resulta en No se puede leer repetidamente.

Lectura fantasma

Una lectura fantasma significa que cuando la transacción A modifica todos los datos de la tabla, la transacción B está insertando una nueva línea de datos en la tabla en este momento, y luego la transacción A, al ver la tabla, encontrará que hay otra fila de datos que no se ha modificado, parece que hay una ilusión Igual

Por ejemplo, hay diez personas con un salario de 200. La transacción A lee el número total de 10, y luego la transacción B inserta la información de un empleado, y el salario también es 200. Cuando la transacción A realiza un segundo en poco tiempo Durante la segunda lectura, habrá dos resultados inconsistentes. No sé si el resultado es correcto. En este momento, se produce la lectura fantasma.

Recordatorio:

La clave para la lectura no repetible es la modificación:

Los mismos datos, los valores leídos por primera vez y la segunda vez son inconsistentes en poco tiempo;

El objetivo de la lectura fantasma es agregar y eliminar;

Cómo resolver tales problemas

El mecanismo de bloqueo de desarrollo de la base de datos resuelve estos problemas durante el acceso concurrente. De acuerdo con los diferentes objetos bloqueados, el bloqueo se puede dividir en bloqueos de nivel de fila y bloqueos de nivel de tabla; de acuerdo con la relación de bloqueos de transacción concurrente, se divide en bloqueos compartidos y bloqueos exclusivos. Los bloqueos compartidos evitan bloqueos exclusivos pero permiten compartirlos. Los bloqueos exclusivos son para evitar bloqueos compartidos y otros bloqueos exclusivos. Para poder modificar los datos de manera segura durante la concurrencia, la base de datos debe agregar bloqueos exclusivos en las filas modificadas, agregar, eliminar y modificar las declaraciones de consulta Adoptará implícitamente el bloqueo de fila necesario;

La gestión del mecanismo de bloqueo es muy complicada, por lo que, en función del mecanismo de bloqueo, la base de datos proporciona a los usuarios diferentes niveles de aislamiento de transacciones. El usuario puede personalizar el nivel de aislamiento de la librería, y la base de datos seleccionará automáticamente el bloqueo apropiado de acuerdo con los diferentes niveles;

El nivel de aislamiento de la transacción y el rendimiento de concurrencia de la base de datos son inversamente proporcionales, cuanto mayor sea el nivel de aislamiento, menor será la concurrencia;

Nivel de aislamiento de transacción

El nivel de aislamiento implementado por defecto en la base de datos mysql es Repetible (lectura repetible);

Admite cuatro niveles de aislamiento en mysql, Oracle solo admite Serializeble (serialización) y Read commit (read commit) dos niveles, el valor predeterminado es el último;

Las cuatro características de las transacciones: atomicidad (la ejecución se basa en unidades individuales), consistencia (todo éxito o fracaso), aislamiento (ejecución de la transacción, sin interferencia), durabilidad (las transacciones en la base de datos cambian en Siempre existirá sin verse afectado por otras modificaciones);

Leer sin confirmar (leer sin confirmar)

Cuando una transacción escribe un toque de datos, otra transacción no puede escribir en estos datos al mismo tiempo. El estado en este momento solo es legible, lo que se logra mediante un bloqueo de escritura exclusivo, para evitar que el envío de datos no sea modificado por usted mismo Datos, pero los datos modificados se leerán si no se envían, por lo que cuando los datos no se determinen, los datos de prueba se leerán y utilizarán, y se producirá una lectura sucia;

Se resolvieron las actualizaciones faltantes, pero aún pueden ocurrir lecturas sucias

Leer comprometido

Este nivel es cuando una transacción es una operación de solo lectura, permitiendo que otras transacciones lean y escriban, pero si es una transacción de escritura, prohibirá la lectura y escritura de otras transacciones, para evitar lecturas sucias, pero puede haber lecturas no repetibles cuando una operación Al leer los mismos datos varias veces, los datos se leen por primera vez y se insertan otros datos en el medio para escribirlos. No se puede acceder a la transacción 1. Cuando la transacción 1 accede a los datos por segunda vez, los datos han cambiado dos veces Los datos son inconsistentes, lo que resulta en una lectura no repetible;

Aunque este nivel bloquea un dato durante la escritura de una transacción, aún causa una lectura no repetible cuando la transacción realiza múltiples lecturas;

Perdido actualización y resolver el problema de la lectura sucia

Lectura repetible (lectura repetible)

El tercer nivel es que para que la transacción lea repetidamente los mismos datos varias veces, causa una lectura no repetible. Se estipula que durante las lecturas múltiples de la transacción, otras transacciones no pueden acceder a los datos. La transacción de lectura prohíbe la transacción de escritura y la transacción de lectura está permitida. Lectura y escritura, pero pueden producirse lecturas mágicas. Las operaciones de escritura están prohibidas en este nivel, pero puede agregar y eliminar datos, lo que provocará lecturas mágicas;

Resolver la actualización se pierde, las lecturas sucias, lectura no repetible, pero habrá magia de lectura

Serializable

Este nivel requiere la serialización de las transacciones. Las transacciones solo pueden ejecutarse una tras otra y no pueden ejecutarse simultáneamente. La serialización no puede lograrse a través de bloqueos de nivel de fila. Debe garantizarse mediante otros mecanismos que las transacciones que realizan operaciones de consulta no tengan acceso a los datos recién insertados. El nivel es el nivel de aislamiento de transacción más alto, el precio es de bajo rendimiento;

Resolver la actualización se pierde, las lecturas sucias, lectura no repetible, lectura fantasma (lectura ficticio)

(La transferencia de imagen de la cadena externa falló, el sitio de origen puede tener un mecanismo de cadena antirrobo, se recomienda guardar la imagen y subirla directamente (img-7DdOnsrv-1587289330743) (C: \ Users \ Samsung \ Desktop \ database entrevista preguntas \ images \ 2019052019551758.png) ]

Actualizaciones faltantes resueltas, lecturas sucias, lecturas no repetibles, lecturas fantasmas (lecturas virtuales) **

Inserte la descripción de la imagen aquí

Publicado 5 artículos originales · elogiado 4 · visitas 17

Supongo que te gusta

Origin blog.csdn.net/qq_45218334/article/details/105618884
Recomendado
Clasificación