[Base de datos] MySQL MVCC (control de concurrencia de múltiples versiones) control de concurrencia de múltiples versiones

Control de concurrencia de múltiples versiones MVCC (Multi-Version Concurrency Control) de MySQL

I. Introducción

1, MySQL para garantizar el aislamiento de transacciones, para lograr el nivel de aislamiento de la base de datos, la introducción de MVCC
2, es necesario comprender la entrada del registro de deshacer .
3. Necesita comprender la entrada ReadView de la instantánea .
4. Primero observe la siguiente instantánea de MySQL leída y la lectura actual.

Instantánea de lectura:
lea la versión visible del registro (tal vez la versión histórica) sin bloquear. La operación de consulta simple y pura pertenece a la lectura de instantáneas.
Como:

SELECT * FROM student WHERE id=1;

Lectura actual: se lee
la última versión del registro y el registro devuelto por la lectura actual se bloqueará para garantizar que otras transacciones no modifiquen este registro simultáneamente. Las operaciones especiales de consulta, insertar, actualizar y eliminar pertenecen a la lectura actual.
Como:

SELECT * FROM student WHERE id=1 LOCK IN SHARE MODE; //共享锁(S)
SELECT * FROM student WHERE id=1 FOR UPDATE; //排他锁(X)
INSERT INTO student VALUES (1, '张三'); //排他锁(X)
UPDATE student SET name='李四' WHERE id=1; //排他锁(X)
DELETE FROM student WHERE id=1; //排他锁(X)

Insertar, actualizar y eliminar pertenecen a la lectura actual, porque estas tres operaciones incluyen una lectura actual. (La operación de inserción puede desencadenar la verificación de conflictos de la clave única)
, como el proceso específico de la operación de actualización:

  1. Comience a ejecutar la actualización sql, MySQL Server leerá el primer registro que cumpla las condiciones de acuerdo con la condición where, y luego el motor InnoDB devolverá el primer registro y lo bloqueará.
  2. Después de esperar a que MySQL Server reciba este registro bloqueado, iniciará una solicitud de actualización para actualizar este registro.
  3. Se completa una operación de registro y luego se lee el siguiente registro hasta que no se cumplen las condiciones.

En segundo lugar, la realización de MVCC en MySQL

Generalmente, MVCC tiene 2 formas de lograr:

  1. Al escribir datos nuevos, los datos antiguos no se eliminan, pero se insertan datos nuevos. PostgreSQL es el método de implementación utilizado.
  2. Al escribir datos nuevos, mueva los datos antiguos a un lugar separado, como el segmento de reversión. Cuando otros lean los datos, lea los datos antiguos del segmento de reversión, como el motor innodb en la base de datos de Oracle y MySQL.

En pocas palabras, el MVCC de MySQL nos proporciona una forma de leer los datos de las filas en la base de datos actual. Si la fila de lectura está realizando una operación DELETE o UPDATE, la operación de lectura no esperará a que se libere la fila bloqueada, sino que vaya a leer una instantánea. de la fila.
Como se muestra:
Inserte la descripción de la imagen aquí

La figura anterior muestra visualmente el mecanismo de lectura sin bloqueo consistente de InnoDB. Se denomina lectura sin bloqueo porque no es necesario esperar a que se libere el bloqueo exclusivo en la fila. Los datos instantáneos se refieren a los datos de la versión anterior de la fila. Cada registro de fila puede tener varias versiones. Esta técnica generalmente se denomina técnica de varias versiones de fila. El control de concurrencia resultante se denomina Control de concurrencia de múltiples versiones (MVCC). InnoDB implementa MVCC a través del registro de deshacer.

En los niveles de aislamiento de transacciones RC y RR, InnoDB utiliza la lectura sin bloqueo consistente de MVCC de forma predeterminada.

  • En RC, la lectura constante sin bloqueo siempre lee los datos de instantánea más recientes de la fila bloqueada.
  • En RR, lea la versión de datos de la fila al comienzo de la transacción.

Supongo que te gusta

Origin blog.csdn.net/thesprit/article/details/112984374
Recomendado
Clasificación