Mysql
 sql >> Base de données >  >> RDS >> Mysql

Transactions parallèles dans mysql

Tout dépend du ISOLATION LEVEL vous avez défini.

Vous pouvez voir lequel vous avez défini avec cette requête :

select @@global.tx_isolation, @@session.tx_isolation;

Avant d'expliquer les différents niveaux d'isolement, laissez-moi vous expliquer quels problèmes ils essaient d'éviter :

  • La lecture sale :Les données d'une transaction non encore terminée sont lues par une autre transaction.

  • La mise à jour perdue :Deux transactions modifient une entrée dans une table en parallèle. Lorsque les deux transactions sont terminées, une seule modification est appliquée.

  • La lecture non répétable  : les lectures récurrentes entraînent des résultats différents.

  • La lecture fantôme :Au cours d'une transaction, une autre transaction ajoute ou supprime des entrées de table.

Passons maintenant aux différents niveaux d'isolement.

Lire non validé :
Avec ce niveau d'isolement, les opérations de lecture ignorent tout type de verrous, par conséquent, l'un des problèmes mentionnés ci-dessus peut survenir.

Lire validé :
Ce niveau d'isolement place un verrou en écriture pour toute la transaction sur les objets qui doivent être modifiés. Les verrous de lecture ne sont définis que lors de la lecture de données. Par conséquent, une lecture non répétable et une lecture fantôme peuvent se produire.

Lecture répétable :
Avec ce niveau d'isolement, il est assuré que les opérations de lecture récurrentes donnent toujours le même résultat lorsque les paramètres sont les mêmes. Des verrous sont définis pour les opérations de lecture et d'écriture pendant toute la durée de la transaction. Par conséquent, seules des lectures fantômes peuvent se produire.

Sérialisable :
Le niveau d'isolement le plus élevé garantit que le résultat des transactions exécutées en parallèle est le même que si les transactions s'exécutaient l'une après l'autre. La plupart des bases de données n'exécutent pas vraiment ces transactions les unes après les autres, ce serait une trop grande perte de performances. Par conséquent, il peut arriver qu'une transaction soit interrompue. MySQL le réalise par exemple avec MVCC (Multi-Version Concurrency Control). Google, si vous voulez en savoir plus. C'est trop pour cette réponse.

Dans l'ensemble, ce tableau l'explique également :

                 | Lost updates | Dirty Read | Non-Repeatable Read | Phantom Read
---------------------------------------------------------------------------------
Read Uncommitted | possible     | possible   | possible            | possible
Read Committed   | impossible   | impossible | possible            | possible
Repeatable Read  | impossible   | impossible | impossible          | possible
Serializable     | impossible   | impossible | impossible          | impossible
  • Dans cette saisie manuelle est quelques informations supplémentaires à ce sujet et comment définir le niveau d'isolement.

Tout cela n'est que théorie pour les systèmes de gestion de bases de données relationnelles. Étant donné que MySQL utilise MVCC (contrôle de concurrence multi-versions), les lectures fantômes ne se produisent pas lors de l'utilisation d'InnoDB et du niveau d'isolement de lecture reproductible .
À partir du manuel :