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 valeursde 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 typemysql>UNLOCK TABLES;Verrouiller la tableVerrouillez 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]1Tutoriel 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
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!