Principio de transacción del motor MySQL-Innodb

1. Introducción comercial

Una transacción es una colección de operaciones. Es una unidad de trabajo indivisible. Una transacción enviará o retirará solicitudes de operación al sistema como un todo, es decir, estas operaciones se realizarán correctamente al mismo tiempo o fallarán al mismo tiempo.

2 características de la transacción

  • Atomicidad: una transacción es una unidad mínima indivisible de operación, todas tienen éxito o todas fallan.
  • Coherencia: cuando se completa la transacción, todos los datos deben mantenerse en un estado coherente.
  • Aislamiento (lsolation): el mecanismo de aislamiento proporcionado por el sistema de base de datos garantiza que las transacciones se ejecuten en un entorno independiente que no se ve afectado por operaciones concurrentes externas
  • Durabilidad: una vez que una transacción se confirma o revierte, sus cambios en los datos de la base de datos son permanentes.

3. Principio de aplicación de la transacción

La atomicidad, la consistencia y la durabilidad se logran principalmente a través de registros redo.log y registros undo.logo.
El aislamiento se implementa en función de bloqueos y MVCC (control de múltiples versiones)

inserte la descripción de la imagen aquí

4 redo log garantiza la persistencia

Registro de rehacer: registra la modificación física de la página de datos cuando se confirma la transacción y se utiliza para implementar la transacción 持久性. El archivo de registro consta de dos partes: 重做日志缓冲(búfer de registro de rehacer) y 重做日志文件(archivo de registro de rehacer), la primera está en la memoria y la segunda está en el disco. 当事务提交之后会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘,发生错误时,进行数据恢复使用.
inserte la descripción de la imagen aquí
Cuando se envía la transacción, en primer lugar, los datos que debe cambiar io en el archivo ibd se transfieren al grupo de búfer en la memoria, y los datos se modifican en el grupo de búfer y, al mismo tiempo, la página de datos los cambios se cargan en el búfer de registro de rehacer, y luego el búfer de registro de redo pasa de manera secuencial, actualice el archivo de registro de redo en el disco (aumentar el registro es más rápido), es decir, para completar la confirmación de la transacción, luego, el grupo de búferes se actualizará aleatoriamente, y los datos modificados se descargarán en ibd, y luego, si se produce un bloqueo, se reiniciará Leer el archivo de registro de rehacer en el grupo de búferes para completar la persistencia.

  • idb es el archivo físico que almacena datos para mysql

  • Cuando la página sucia en el grupo de búfer no se ha actualizado en el disco, se produce un bloqueo.Después de iniciar el servicio, puede encontrar los registros que deben actualizarse en el archivo del disco a través del registro de rehacer;

  • Los datos en el grupo de búfer se vacían directamente al archivo de disco, que es una E/S aleatoria con poca eficiencia, mientras que la grabación de los datos en el grupo de búfer en el registro de rehacer es una E/S secuencial, que puede mejorar la velocidad del envío de transacciones;

5 registro de deshacer garantiza la atomicidad

El rollback log se utiliza para registrar la información antes de que se modifiquen los datos, tiene dos funciones: 提供回滚y MVCC(多版本并发控制). Deshacer registro y rehacer registro registro registro físico no es lo mismo, es un registro lógico. Se puede considerar que cuando se elimina un registro, se registrará un registro de inserción correspondiente en el undolog, y viceversa, cuando se actualiza un registro, se registrará un registro de actualización correspondiente. Cuando se ejecuta la retrotracción, el contenido correspondiente se puede leer del registro lógico en undo og y retrotraerse.

  • Destrucción del registro de deshacer: el registro de deshacer se genera cuando se ejecuta la transacción, y el registro de deshacer no se eliminará inmediatamente cuando se confirme la transacción, porque estos registros también se pueden usar para MVCC.
  • Almacenamiento de registros de deshacer: el registro de deshacer se administra y registra en segmentos, almacenados en el segmento de reversión, que contiene 1024 segmentos sueltos de deshacer.

6 concepto MVCC

El nombre completo de MVCC es Multi-Version (oncurrency ontrol, control de concurrencia de múltiples versiones). Se refiere a mantener múltiples versiones de un dato, para que no haya conflicto en las operaciones de lectura y escritura. La lectura de instantáneas proporciona una función de lectura sin bloqueo. para que MySQL implemente MVCC. La implementación específica de MVCC también necesita Confíe en tres campos implícitos en los registros de la base de datos, registro de deshacer registro, vista de lectura.

  • Actualmente leyendo

Lo que se lee es la última versión del registro. Al leer, se debe asegurar que otras transacciones concurrentes no puedan modificar el registro actual, y el registro de lectura se bloqueará. Para nuestras operaciones diarias, tales como: seleccionar... bloquear en modo compartido (bloqueo compartido), seleccionar... para actualizar, actualizar, insertar, eliminar (bloqueo exclusivo) son lecturas actuales

  • lectura instantánea

Una selección simple (sin bloqueo) es una lectura de instantánea, una lectura de instantánea, que lee la versión visible de los datos registrados, que pueden ser datos históricos, sin bloqueo, y es una lectura sin bloqueo.
Lecturas de instantáneas bajo diferentes niveles de aislamiento

  • Lectura confirmada: cada vez que se realiza una selección, se genera una instantánea de lectura.
  • Lectura repetible: la primera declaración de selección después de iniciar la transacción es donde se lee la instantánea
  • Serializable: las lecturas de instantáneas degenerarán en lecturas actuales.

6.1 Campos ocultos

Además de los atributos de la tabla en la tabla de la base de datos, hay tres campos ocultos
inserte la descripción de la imagen aquí

campo escondido significado
Identificación DB TRX ID de transacción de última modificación, el ID de transacción del registro insertado o modificado por última vez.
PTR DE ROLLO DB Puntero de reversión, que apunta a la versión anterior de este registro, utilizado para cooperar con el registro de deshacer, que apunta a la versión anterior.
ID DE FILA DE LA BD Clave principal oculta, si la estructura de la tabla no especifica una clave principal, se generará este campo oculto.

6.2 Cadena de versiones

Modificar el mismo registro por diferentes transacciones o la misma transacción hará que el deshacer registro del registro genere una lista vinculada de versión de registro. El encabezado de la lista vinculada es el último registro antiguo y el final de la lista vinculada es el registro antiguo más antiguo.
.

deshacer almacenamiento de registro de registro

Registro de reversión, que se genera durante la inserción, actualización y eliminación para facilitar la reversión de datos.

  • Al insertar, el registro de deshacer generado solo se necesita para revertir y se puede eliminar inmediatamente después de confirmar la transacción.
  • Durante la actualización y la eliminación, el registro de deshacer el registro generado no solo es necesario para la reversión, sino también para la lectura de instantáneas, y no se eliminará de inmediato.

La columna DB ROLL PTR del campo oculto en la tabla de la base de datos almacena los datos de la versión anterior en el registro de deshacer. Por lo tanto, como se muestra, los datos en el registro de deshacer forman una cadena de versión

inserte la descripción de la imagen aquí

6.3 Vista de lectura

ReadView (vista de lectura) es la base para que MVCC extraiga datos cuando se ejecuta SOL de lectura de instantáneas, y registra y mantiene la identificación de transacción actualmente activa (no confirmada) del sistema.

campo significado
m_ids Conjunto de ID de transacciones actualmente activas
min_trx_id ID mínimo de transacción activa
max_trx_id ID de transacción preasignado, el ID de transacción máximo actual + 1 (porque el ID de transacción se incrementa automáticamente)
creador_trx_id El ID de transacción del creador de ReadView

6.3.1 Reglas de control de versiones de vista de lectura

Nota: En ese momento, la identificación de la transacción se almacena en la identificación DB TRX del campo oculto en la tabla de la base de datos.

inserte la descripción de la imagen aquí

Los diferentes niveles de aislamiento tienen diferentes tiempos para generar Readview:
LECTURA COMPROMETIDA: genera ReadView cada vez que se ejecuta una lectura de instantánea en una transacción.
LECTURA REPETIBLE: una vista de lectura se genera solo cuando la lectura de la instantánea se ejecuta por primera vez en una transacción y la vista de lectura se reutiliza posteriormente.

7 Implementación de aislamiento

inserte la descripción de la imagen aquí

##7.1 Aislamiento: principio de lectura comprometida

inserte la descripción de la imagen aquí

LECTURA COMPROMETIDA: ReadView se genera cada vez que se ejecuta una lectura instantánea en una transacción. Determinamos qué registro se consulta en función de ReadView y el registro de deshacer.

7.2 Aislamiento - LECTURA REPETIBLE se puede leer repetidamente

El proceso de lectura repetible es el mismo que el modo RC, excepto que la lectura instantánea se genera en la primera consulta y todo el resto se multiplexa con la primera lectura instantánea.

inserte la descripción de la imagen aquí

8 consistencia

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_46645840/article/details/129013215
Recomendado
Clasificación