[Tutorial de base de datos] Análisis de aislamiento de transacciones de Mysql

Introducción de negocios

Una transacción es un conjunto de consultas SQL atómicas o una unidad de trabajo independiente. En resumen, todas las declaraciones dentro de una transacción se ejecutan con éxito o todas las ejecuciones fallan.

En Mysql, el soporte de transacciones se implementa en la capa del motor, pero no todos los motores de Mysql admiten transacciones. Por ejemplo, el motor MyISAM no admite transacciones. Esta es una de las razones importantes por las que MyISAM es reemplazado por InnoDB.

Cuando se trata de asuntos, definitivamente pensamos en ACID:

Atomicidad Consistencia Aislamiento Durabilidad

Nivel de aislamiento

Cuando se ejecutan varias transacciones en la base de datos al mismo tiempo, pueden ocurrir problemas como lecturas sucias, lecturas no repetibles y lecturas fantasmas, porque existe el concepto de nivel de aislamiento de transacciones.

El estándar SQL define cuatro niveles de aislamiento:

READ UNCOMMITTED (lectura no confirmada)

Las modificaciones en la transacción, incluso si aún no se han comprometido, son visibles para otras transacciones. La transacción puede leer datos no confirmados, también conocidos como lectura sucia (lectura sucia).

LEER COMPROMETIDOS

Una vez confirmada una transacción, otras transacciones pueden ver los cambios realizados. Este nivel también se denomina lectura no repetible, porque si la misma consulta se ejecuta dos veces en una transacción, los resultados pueden ser diferentes.

LECTURA REPETIBLE (lectura repetible)

Durante la ejecución de una transacción, siempre es coherente con los datos vistos al inicio de la transacción. Por supuesto, en este nivel, los cambios de datos no confirmados también son invisibles para otras transacciones.

SERIALIZABLE (serializable)

Para la misma fila de registros, tanto la escritura como la lectura están bloqueadas. Cuando se produce un conflicto de bloqueo de lectura-escritura, la transacción a la que se accede más tarde debe esperar a que se complete la transacción anterior antes de que pueda continuar, lo que provocará mucho tiempo de espera. y bloquear problemas de contención.

En cuanto a la implementación, se creará una vista en la base de datos, y la lógica de la vista prevalecerá al acceder.

En el nivel de aislamiento de lectura repetible, esta vista se crea cuando se inicia la transacción y esta vista se utiliza durante toda la transacción.

En el nivel de aislamiento de confirmación de lectura, esta vista se crea cuando la instrucción SQL comienza a ejecutarse.

Bajo el nivel de aislamiento de lectura no confirmada, el último valor del registro se devuelve directamente y no existe el concepto de vista.

En el nivel de aislamiento serializado, los bloqueos se utilizan directamente para evitar el acceso paralelo.

El método de configuración consiste en establecer el parámetro de inicio de transacción-aislamiento en el nivel de aislamiento deseado.

Ver la configuración actual:

mysql> muestra variables como 'transaction_isolation';

+ ----------------------- + ----------------- +

| Variable_name | Valor |

+ ----------------------- + ----------------- +

| transaction_isolation | LECTURA REPETIBLE |

+ ----------------------- + ----------------- +

1 fila en el conjunto (0,00 segundos)

En resumen, la existencia es razonable y los diferentes niveles de aislamiento son adecuados para diferentes escenarios.Los detalles deben determinarse de acuerdo con los escenarios comerciales.

Implementación del aislamiento de transacciones

En Mysql, de hecho, cada actualización de registro también registrará una operación de reversión al mismo tiempo, y el último valor del registro puede obtener el valor del estado anterior a través de la operación de reversión.

El sistema determinará automáticamente que cuando no haya transacciones que necesiten revertir el registro, eliminará el registro de reversión.

Por qué no se recomienda utilizar transacciones largas:

Las transacciones largas significan que habrá vistas de transacciones muy antiguas en el sistema. Dado que estas transacciones pueden acceder a cualquier dato de la base de datos en cualquier momento, antes de que se confirme la transacción, los registros de reversión que se pueden usar en la base de datos deben conservarse, lo que ocupará mucho espacio de almacenamiento. Al mismo tiempo, las transacciones largas también ocupan recursos de bloqueo y también pueden derribar toda la biblioteca.

La forma en que comienza la transacción

Inicie explícitamente la declaración de transacción, comience o comience la transacción, la confirmación se confirma y se utiliza la reversión. set autocommit = 0, este comando desactivará la confirmación automática del hilo, lo que significa que si se ejecuta una instrucción de selección, la transacción se iniciará y no se confirmará automáticamente hasta que ejecute activamente la confirmación, la reversión o la desconexión.

La sugerencia personal es iniciar la transacción explícitamente a través del primer método para evitar la ocurrencia de transacciones largas.

En el caso de set autocommit = 1, la transacción se inicia explícitamente con begin y la transacción se confirma si se ejecuta la confirmación. Si se ejecuta el trabajo de confirmación y la cadena, la transacción se confirma y la siguiente transacción se inicia automáticamente, lo que también ahorra la sobrecarga de ejecutar la instrucción begin nuevamente.

Consulta de transacción larga:

La siguiente declaración es para consultar la transacción que dura más de 60 segundos.

mysql> seleccione * de information_schema.innodb_trx donde TIME_TO_SEC (timediff (ahora (), trx_started))> 60;

Conjunto vacío (0,00 segundos)

En resumen, en el proceso de desarrollo, tratamos de minimizar el uso de transacciones largas. Si es inevitable, asegurarnos de que el espacio de registro lógico sea lo suficientemente grande y soporte el crecimiento dinámico del espacio de registro. Supervise la tabla Innodb_trx y encuentre una alarma de transacción larga.

 

Además, si desea mejorar su capacidad de programación, ¡aprenda el lenguaje C y la programación C ++! Adelantar en una curva, ¡un paso más rápido! Puede que pueda ayudarte aquí ~

UP ha subido a la página de inicio algunos tutoriales en vídeo sobre el aprendizaje de la programación C / C ++. ¡Aquellos que estén interesados ​​o estén aprendiendo deben ir y echar un vistazo! Te será de ayuda ~

Compartir (código fuente, video del proyecto real, notas del proyecto, tutorial introductorio básico)

¡Bienvenidos socios que cambian de carrera y aprenden programación, use más información para aprender y crecer más rápido que si lo piensa usted mismo!

Programación de aprendizaje:

Programación de aprendizaje:

Supongo que te gusta

Origin blog.csdn.net/weixin_45713725/article/details/114976760
Recomendado
Clasificación