Maison > Article > base de données > MySQL Advanced Nine - Verrouillage de table MyISAM (verrouillage de lecture partagé)
Les verrous sont un mécanisme permettant aux ordinateurs de coordonner l'accès simultané à une ressource par plusieurs processus ou threads. Dans une base de données, les données sont également une ressource partagée par de nombreux utilisateurs. Comment garantir la cohérence et l'efficacité de l'accès aux données est un problème pour toutes les bases de données. Les conflits de verrouillage sont également un facteur important affectant les performances de l'accès simultané à la base de données. De ce point de vue, les verrous sont particulièrement importants et complexes pour les bases de données.
Présentation du verrouillage MySQL
Comparé à d'autres bases de données, le mécanisme de verrouillage de MySQL est relativement simple. Sa caractéristique la plus importante est que différents moteurs de stockage prennent en charge différents mécanismes de verrouillage. Par exemple, les moteurs de stockage MyISAM et MEMORY utilisent le verrouillage au niveau de la table (verrouillage au niveau de la table) ; le moteur de stockage BDB utilise le verrouillage au niveau de la page (verrouillage au niveau de la page), mais prend également en charge le verrouillage au niveau de la table, mais utilise par défaut le verrouillage des lignes. -verrouillage de niveau.
Les conflits de verrouillage de table sur le système peuvent être analysés en vérifiant les variables d'état table_locks_waited et table_locks_immediate :
afficher l'état comme 'table%';
Le résultat est si Table_locks_waited A une valeur relativement élevée indique qu'il existe un grave conflit de verrouillage au niveau de la table.
Caractéristiques de ces trois verrous dans MySQL :
Surcharge, vitesse de verrouillage, blocage, granularité, performances de concurrence
Verrouillage au niveau de la table : faible surcharge, verrouillage rapide, pas de blocage se produira, la granularité du verrouillage est grande, la probabilité de conflit est la plus élevée et la concurrence est la plus faible
Verrouillage au niveau de la ligne : surcharge élevée, verrouillage lent, un blocage se produira, la granularité du verrouillage est faible ; , et des conflits de verrouillage se produisent La probabilité la plus faible et la concurrence la plus élevée ;
Verrouillage de page : le coût est entre les deux premiers, un blocage se produira, la granularité du verrouillage est entre les deux premiers et la concurrence est moyenne ; 🎜>
Juste du point de vue du verrouillage : les verrous au niveau de la table sont plus adaptés aux applications qui sont principalement basées sur des requêtes et ne mettent à jour qu'une petite quantité de données en fonction des conditions d'index, telles que les applications Web, tandis que les verrous au niveau des lignes ; sont plus adaptés aux applications qui ont un grand nombre de mises à jour simultanées basées sur des conditions d'index et un petit nombre de données différentes, ainsi qu'aux applications avec uniquement des requêtes simultanées, telles que certains systèmes de traitement de transactions en ligne (OLTP).
Les verrous MySQL au niveau de la table ont deux modes : le verrouillage en lecture partagé de la table (Table Read Lock) et le verrouillage en écriture exclusif de la table (Table Write Lock).
Verrouiller la table
1. Ajouter un verrou de lecture partagé
verrouiller le nom de la table en lecture
2. Déverrouiller
déverrouiller les tables ;
3. Verrouillage en écriture exclusif de la table
verrouillage du nom de la table en écriture ;
Remarque :
L'opération de lecture de la table MyISAM ne bloquera pas les autres A. la demande de lecture de l'utilisateur pour la même table bloquera les demandes pour la même table ; une opération d'écriture pour la table MyISAM bloquera les opérations de lecture et d'écriture des autres utilisateurs pour la même table ; l'opération de lecture de la table MyISAM est différente de l'opération d'écriture. temps, et les opérations d'écriture sont en série ! Lorsqu'un thread obtient un verrou en écriture sur une table, seul le thread détenant le verrou peut mettre à jour la table. Les opérations de lecture et d'écriture à partir d'autres threads attendront que le verrou soit libéré.
Une SESSION utilise la commande Verrouiller la table pour verrouiller la table. Cette SESSION peut interroger les enregistrements de la table verrouillée, mais une erreur sera générée lors de la mise à jour ou de l'accès à d'autres tables en même temps, une autre SESSION peut le faire ; interrogez les enregistrements de la table, mais il y aura une attente de verrouillage lors de la mise à jour.