Explicación detallada de cómo MySQL (InnoDB) maneja los interbloqueos.
Uno es MVCC y el otro es un protocolo de bloqueo de dos fases.
¿Por qué controlar la concurrencia? Esto se debe a que cuando varios usuarios operan MySQL al mismo tiempo, para mejorar el rendimiento de concurrencia, se requiere la ejecución en serie a medida que llegan solicitudes de varios usuarios (para resolver lecturas sucias, lecturas no repetibles y lecturas fantasma).
Definición oficial:
El protocolo de bloqueo de dos fases significa que todas las transacciones deben bloquear y desbloquear datos en dos fases. Antes de que se puedan leer o escribir datos, una transacción primero debe obtener un bloqueo de los datos. Después de ser desbloqueada, la transacción ya no solicita ni obtiene ningún otro bloqueo.
El mapeo a MySQL se divide en dos fases:
Sin embargo, el protocolo de bloqueo de dos fases no requiere que la transacción bloquee todos los datos requeridos a la vez (innodb solo bloqueará cuando se necesitan datos de la columna de índice), y no hay ningún requisito de orden en la fase de bloqueo, por lo que este método de control de concurrencia formará un punto muerto.
MySQL tiene dos métodos de manejo de interbloqueos:
Detección de interbloqueos (activada de forma predeterminada)
El principio de la detección de interbloqueos es construir vértices basados en transacciones, dirigidos Los gráficos con bloqueos como aristas determinan si hay un ciclo o un punto muerto en el gráfico dirigido.
Revertir
Después de detectar un punto muerto, seleccione la transacción con el menor número de filas insertadas, actualizadas o eliminadas para revertir, según el campo trx_weight en INFORMACIÓN_SCHEMA. Forma TRX.
Recopilar información sobre interbloqueos:
Reducir interbloqueos:
Solución de interbloqueos: