Maison >base de données >tutoriel mysql >Explication détaillée par MySQL des diverses distinctions de verrouillage et MVCC

Explication détaillée par MySQL des diverses distinctions de verrouillage et MVCC

黄舟
黄舟original
2017-03-02 15:54:242808parcourir

MySQL semble avoir beaucoup de verrous. Après avoir vérifié la plupart des informations,

Quels verrous de table, verrous de ligne, verrous de page

Verrouillage partagé, verrouillage exclusif, verrouillage d'intention, verrouillage en lecture, verrouillage en écriture

Verrouillage pessimiste, verrouillage optimiste. .

J'y vais, j'ai vraiment envie de demander, y a-t-il un cadenas doré ? J'ai toujours Fan Bingbing. . .

Oh, pourquoi est-ce que c'est si compliqué ? Alors faisons le tri et résumons-le.

Il existe également une compréhension et des exemples de mvcc sous innodb Comment maintenir un accès efficace et cohérent sous accès simultané ? C’est simple et facile à comprendre. Mes amis m’ont dit que les grandes entreprises aiment aussi poser cette question lors des entretiens.

Verrouillage de table/ligne/page :

Verrouillage au niveau de la table : moteurs de stockage MyISAM et MEMORY

Verrouillage au niveau des lignes : moteur de stockage InnoDB

Verrouillage au niveau des pages : moteur de stockage BDB


Verrouillage au niveau de la table : faible surcharge, faible concurrence, verrouillage rapide ; pas de blocage important ; grande granularité de verrouillage, la probabilité de conflit de verrouillage est la plus élevée et la concurrence est également la plus faible.

Verrouillage au niveau de la ligne : surcharge élevée, concurrence élevée, un blocage lent se produira ; granularité de verrouillage minimale, probabilité la plus faible de conflit de verrouillage, concurrence également la plus élevée ; .

Verrouillage de page : la surcharge et le temps de verrouillage se situent entre les verrous de table et les verrous de ligne ; des blocages se produiront ; la granularité du verrouillage se situe entre les verrous de table et les verrous de ligne, et la concurrence est moyenne.

Verrou partagé/exclusif

Le verrou partagé, également connu sous le nom de verrou de lecture, est un verrou créé par une opération de lecture. D'autres utilisateurs peuvent lire les données simultanément, mais aucune transaction ne peut modifier les données (acquérir un verrou exclusif sur les données) tant que tous les verrous partagés n'ont pas été libérés.

Le verrouillage exclusif est également appelé verrouillage en écriture. Si la transaction T ajoute un verrou exclusif aux données A, les autres transactions ne peuvent ajouter aucun type de blocage à A. Les transactions bénéficiant de verrous exclusifs peuvent à la fois lire et modifier des données.

Mode de verrouillage Mysiam

MyISAM ajoutera automatiquement des verrous en lecture à toutes les tables impliquées avant d'exécuter l'instruction de requête (SELECT) avant les opérations de mise à jour (). UPDATE, DELETE, INSERT, etc.), des verrous en écriture seront automatiquement ajoutés aux tables concernées.

a. Les opérations de lecture sur les tables MyISAM (ajout de verrous de lecture) ne bloqueront pas les demandes de lecture des autres processus pour la même table, mais bloqueront les demandes d'écriture pour la même table. Cela ne se produira que lorsque le verrou de lecture est activé. libéré. ​​Effectuer des opérations d’écriture à partir d’autres processus.

b. Les opérations d'écriture (ajout de verrous d'écriture) à la table MyISAM empêcheront les autres processus de lire et d'écrire sur la même table. Ce n'est que lorsque le verrou d'écriture sera libéré que les autres processus le feront. être exécuté. Opérations de lecture et d’écriture du processus.


mode de verrouillage innodb

Le verrouillage d'intention est automatiquement ajouté par InnoDB et ne nécessite aucune intervention de l'utilisateur.

Pour l'insertion, la mise à jour et la suppression, InnoDB ajoutera automatiquement des verrous exclusifs (X) aux données impliquées ; pour les instructions Select générales, InnoDB n'ajoutera aucun verrou et la transaction peut être fait via ce qui suit L'instruction ajoute un verrou partagé ou un verrou exclusif à l'affichage.

Verrouillage partagé : SÉLECTIONNER... VERROUILLER EN MODE PARTAGE ;

Verrouillage exclusif : SELECT... POUR LA MISE À JOUR ;

MVCC (Multiversion Concurrency Control)

Un concept difficile à comprendre, J'ai consulté beaucoup d'informations et de blogs, et voici une explication simple et facile à comprendre.

Simulation de scénario :

Sous le principe d'une concurrence élevée, vous devez faire attention à ce principe.

La transaction L1 modifie la valeur clé de D dans une table et n'a pas encore été soumise

La transaction L2 modifie également la valeur clé de ; D et est soumis ; puis L1 se soumet.

Que s'est-il passé ?

L1 lit la valeur 100 correspondant à la clé:123 de D

L2 lit 100 correspondant à key:123 de D

L1 ajoute 1 à la valeur et met à jour key:123 à 100 1

Augmentez la valeur de la paire L2 de 2 et mettez à jour la clé : 123 à 100 2

Si L1 et L2 sont exécutés en série, la valeur correspondant à key:123 sera 103, mais l'effet d'exécution de L1 dans l'exécution simultanée ci-dessus est entièrement couvert par L2, et la valeur réelle correspondant à key : 123 devient 102. Juste parce que la transaction L1 n'a pas été soumise, L2 est revenue.

Comment y faire face ?

Méthode 1 :

Ajouter un verrou. N'avons-nous pas tous parlé de ce problème de verrouillage auparavant ? Ajoutez-y un verrou en écriture et attendez que L1 termine son exécution avant d'exécuter L2. C'est possible, mais une file d'attente se produit et la concurrence diminue. Il s'agit d'une sorte de pessimisme. Les machines de contrôle de concurrence basées sur le verrouillage sont généralement appelées mécanismes pessimistes.

Méthode 2 :

Afin d'obtenir la sérialisabilité tout en évitant le mécanisme de verrouillage Pour divers problèmes existants, nous pouvons utiliser un mécanisme de concurrence sans verrouillage basé sur l'idée du contrôle de concurrence multiversion (MVCC) , et enfin ce que je veux dire est tiré ! Les gens appellent généralement les machines de contrôle de concurrence basées sur le verrouillage mécanisme pessimiste (verrouillage pessimiste) , tandis que les mécanismes tels que MVCC sont appelés mécanisme optimiste (verrouillage optimiste) . Un mécanisme pour ajouter un numéro de version. Le numéro de version est conservé par D. Le numéro de version est augmenté à chaque fois que les données sont mises à jour. Le numéro de version peut être utilisé pour gérer plus efficacement les problèmes de cohérence des transactions et de concurrence élevée.

Le mécanisme de verrouillage étant préventif, la lecture bloquera l'écriture, et l'écriture bloquera également la lecture. Lorsque la granularité de verrouillage est plus grande et que le temps est plus long, cela. c'est la concurrence. Les performances ne seront pas très bonnes ; et MVCC est a posteriori, et l'écriture ne bloque pas la lecture jusqu'à la soumission . Il n'y a pas de verrou, la lecture des écritures ne se bloquera pas, améliorant ainsi considérablement les performances de concurrence.

Ce qui précède est l'explication détaillée des différentes distinctions de verrouillage Mysql et MVCC. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn