Maison  >  Article  >  base de données  >  Exemples détaillés de déverrouillage et de verrouillage de tables dans MYSQL

Exemples détaillés de déverrouillage et de verrouillage de tables dans MYSQL

Y2J
Y2Joriginal
2017-05-22 14:20:181945parcourir

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

Présentation du verrouillage MySQL

Comparé. avec 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 ; le moteur de stockage BDB utilise le verrouillage au niveau de la page, mais prend également en charge les verrous au niveau de la table ; le moteur de stockage InnoDB prend en charge les verrous au niveau de la ligne (verrouillage au niveau de la ligne), Le verrouillage au niveau de la table est également pris en charge, mais le verrouillage au niveau des lignes est utilisé par défaut.

Les caractéristiques de ces trois verrous dans MySQL peuvent être grossièrement résumées comme suit.

Surcharge, vitesse de verrouillage, blocage, granularité, performances de concurrence

l Verrouillage au niveau de la table : faible surcharge, verrouillage rapide ; pas de blocage important, un conflit de verrouillage se produit avec la probabilité la plus élevée et la concurrence la plus faible.
l                                                                                                                    Verrous au niveau de la ligne, verrous au niveau de la ligne : une surcharge élevée et des blocages lents peuvent se produire ; la granularité du verrouillage est la plus faible, la probabilité de conflits de verrouillage est la plus faible et le degré de concurrence est également le plus élevé.
l Verrouillage de page : la surcharge et le temps de verrouillage se situent entre les verrous de table et les verrous de ligne ; la granularité du verrouillage se situe entre les verrous de table et les verrous de ligne, et la concurrence est moyenne.

Verrouillage de table MyISAM

Le moteur de stockage MyISAM ne prend en charge que les verrous de table, qui sont également le seul type de verrouillage pris en charge dans les premières versions de MySQL. Avec l'amélioration continue des exigences des applications en matière d'intégrité et de concurrence des transactions, MySQL a commencé à développer des moteurs de stockage basés sur les transactions. Plus tard, le moteur de stockage BDB qui prend en charge les verrous de page et le moteur de stockage InnoDB qui prend en charge les verrous de ligne sont progressivement apparus (en fait, InnoDB est un moteur distinct). Une société désormais rachetée par Oracle). Cependant, le verrou de table de MyISAM reste le type de verrou le plus utilisé. Cette section présentera en détail l'utilisation des verrous de table MyISAM.
Requêteconflit de verrouillage au niveau de la table

Les conflits de verrouillage de table sur le système peuvent être analysés en vérifiant table_locks_waited et table_locks_immediatestatusvariables
mysql> affiche le statut comme 'table%';
+---------------------------------- +-------+
| Nom_variable |
+-----------------------+----- --+
| Table_locks_immediate | 2979 |
| Table_locks_waited |
+-----------------------+--- ----+
2 lignes dans l'ensemble (0,00 sec))
Si la valeur de Table_locks_waited est relativement élevée, cela indique qu'il existe un grave conflit de verrouillage au niveau de la table.

Obtenir la contention de verrouillage de ligne InnoDB

Vous pouvez analyser la contention de verrouillage de ligne sur le système en vérifiant la variable d'état InnoDB_row_lock :
mysql> +----------------------------------+-------+
| Nom_de la variable                                              |
+----------------------------------+-------+
|
| InnoDB_row_lock_time |
| InnoDB_row_lock_time_avg |
| - --------------------+-------+
5 lignes dans l'ensemble (0,01 sec)
Si un conflit de verrouillage est détecté Soyez sérieux, comme les valeurs​​de InnoDB_row_lock_waits et InnoDB_row_lock_time_avg sont relativement élevées, vous pouvez également le déverrouiller via



Le premier type

afficher la liste des processus;

Trouver le processus de verrouillage, tuer l'identifiant;

Deuxième type

mysql>UNLOCK TABLES;

Verrouiller la table

Verrouillez la table de données pour éviter de verrouiller la table de données Pendant le processus de sauvegarde, la table a été

mise à jour

mysql>LOCK TABLES tbl_name READ;

Ajouter un verrou en écriture sur la table :

mysql>LOCK TABLES tbl_name WRITE;

[Recommandations associées]

1

Tutoriel vidéo gratuit MySQL

2. Comment améliorer la vitesse d'interrogation de la base de données pour des millions d'éléments

3 5 erreurs courantes de conception de base de données

4. . Explication détaillée de l'instruction SQL qui conserve le contenu original de Mysql inchangé et ajoute du contenu ultérieurement

5 Un résumé de la façon d'écrire des instructions SQL couramment utilisées dans MySQL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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