MVCC de la tecnología de procesamiento de alta concurrencia de MySQL

¡Obtenga información técnica sobre productos secos e información de la industria por primera vez!

MVCC de la tecnología de procesamiento de alta concurrencia de MySQL

En las recientes vacaciones del Primero de Mayo, además de llevar a los niños de un lado a otro, también leí algunas páginas de "MySQL de alto rendimiento". Además, hay un "MySQL de alta disponibilidad" en casa, que son todos los libros que entregué cuando escribía en CSDN. Hay más de 40 libros antes y después, y algunos de ellos se tiraron antes de mudarse, lo cual es una lástima. . .

Todos sabemos que hay muchos bloqueos en MySQL. Por ejemplo: bloqueos compartidos, bloqueos exclusivos; bloqueos de tabla, bloqueos de fila; bloqueos de lectura, bloqueos de escritura, etc. Estos bloqueos tienden a reducir la capacidad de procesamiento simultáneo del sistema MySQL al procesar datos. En los primeros sistemas de bases de datos, solo las lecturas y las lecturas pueden ser simultáneas, y las lecturas y escrituras, las escrituras y las lecturas y las escrituras y escrituras están bloqueadas. Después de la introducción de varias versiones, solo las escrituras y escrituras se bloquean entre sí, y las otras tres operaciones se pueden paralelizar, lo que mejora enormemente la concurrencia de InnoDB. La tecnología de procesamiento de múltiples versiones es el MVCC del que estamos hablando hoy.

MVCC simplemente significa que en InnoDB, se agregan dos valores ocultos adicionales después de cada fila de datos para realizar MVCC. Uno de estos dos valores registra cuando se crea esta fila de datos, y el otro registra cuando se crea esta fila de datos. creado Caducado (o eliminado).
En la operación real, lo que se almacena no es la hora, sino el número de versión de la transacción.Cada vez que se abre una nueva transacción, se incrementa el número de versión de la transacción. Cada fila de datos agrega un identificador de versión. En una solución de versión basada en una tabla de base de datos, esto generalmente se logra agregando un campo "versión" a la tabla de la base de datos. Al leer los datos, lean este número de versión juntos y agregue uno a este número de versión cuando actualice más tarde. En este punto, los datos de la versión de los datos enviados se comparan con la información de la versión actual del registro correspondiente en la tabla de la base de datos. Si el número de versión de los datos enviados es mayor que el número de versión actual de la tabla de la base de datos, será actualizado; de lo contrario, se considera que los datos no están actualizados.

MVCC de la tecnología de procesamiento de alta concurrencia de MySQL
Al ver esto, creo que mucha gente pensará en la operación CAS. ¿No es este MVCC similar al funcionamiento de CAS? De hecho, muchas cosas en el mundo de la programación son similares. Si lee "Programación de red UNIX", encontrará que el modelo de programación concurrente en Java en realidad se refiere a algunos modelos de programación concurrente en la capa inferior del sistema operativo.

De Dao Zhi Jian, recordé que escribí estas palabras en un artículo anterior. La lógica de procesamiento de múltiples versiones de MVCC bajo el nivel de aislamiento de transacciones predeterminado de MySQL es la siguiente:

  • En SELECT, lea el número de versión de creación <= número de versión de transacción actual, el número de versión de eliminación está vacío o> número de versión de transacción actual.

  • Cuando INSERT, guarde el número de versión de la transacción actual como el número de versión de creación de la fila

  • Cuando BORRE, guarde el número de versión de la transacción actual como el número de versión de eliminación de la fila

  • Durante la ACTUALIZACIÓN, inserte un nuevo registro, guarde el número de versión de la transacción actual como el número de versión de creación de la fila y guarde el número de versión de la transacción actual en la fila eliminada originalmente

A través de MVCC, aunque cada fila de registros requiere espacio de almacenamiento adicional, más trabajo de inspección de filas y algún trabajo de mantenimiento adicional, puede reducir el uso de bloqueos. La mayoría de las operaciones de lectura no necesitan bloquearse, y la operación de lectura de datos es muy simple y de rendimiento Muy bien, y también puede garantizar que solo se leerán las filas que cumplen con el estándar, y solo se bloquearán las filas necesarias.

En general, MVCC tiene las siguientes características:

  • Hay una versión para cada fila de datos, y la versión se actualiza cada vez que se actualizan los datos.

  • Copie la versión actual al modificar y luego modifique a voluntad, sin interferencias entre varias transacciones

  • Compare el número de versión al guardar, si tiene éxito (confirmar), el registro original se sobrescribirá y, si falla, se abandonará la copia (deshacer).

  • Es decir, cada línea tiene un número de versión. Al guardar, se determina si tiene éxito o no de acuerdo con el número de versión. Suena como un candado optimista, porque este parece ser el caso. Puede saber si el envío es exitoso en el momento de la presentación.

Supongo que te gusta

Origin blog.51cto.com/15127565/2666204
Recomendado
Clasificación