Maison >base de données >tutoriel mysql >Qu'est-ce qu'un loquet ? La différence entre loquet et serrure
Latch
Qu'est-ce que latch :
Les verrous sont une fonctionnalité clé qui distingue les systèmes de base de données des systèmes de fichiers. Des mécanismes de verrouillage sont utilisés pour gérer l'accès simultané aux ressources partagées. InnodbLe moteur de stockage verrouille les données de la table au niveau de la ligne, ce qui est une bonne chose. Mais Innodb utilise également des verrous à plusieurs endroits, permettant à plusieurs ressources différentes de fournir un accès simultané. Par exemple, exploitez la liste LRU résumée par le pool de tampons, supprimez, ajoutez et déplacez des éléments dans la liste LRU In. afin d'assurer la cohérence, il doit y avoir un verrou impliqué, qui est le loquet verrou. La différence entre le
loquet et le verrouillage
loquet est généralement appelé Il s'agit d'un loquet (une serrure légère) car le temps de verrouillage nécessaire doit être très court. Si cela dure longtemps, les performances de l’application seront très mauvaises. Dans le moteur de stockage Innodb, latch peut être divisé en mutex (mutex Exclusion) et RW-Lock (verrouillage en lecture-écriture).
Et l'objet lock est une transaction utilisée pour verrouiller des objets dans la base de données, tels que des tables, des lignes et des pages. Et généralement les objets de lock ne sont libérés qu'après la transaction commit ou rollback (Le temps de publication pour différents niveaux d'isolation des transactions peut être différent). De plus, lock, comme dans la plupart des bases de données, est bloqué.
Identique à afficher le moteur innodb mutex pour afficherloquet
nameaffiche les informations de latch et l'emplacement (nombre de lignes) du code source . La classification
latch
est divisée en : mutex : mutex parfois Certaines ressources nécessitent ; le partage et la simultanéité, mais ils ne sont pas très fréquents, donc demander un mutex depuis le système d'exploitation, mutex sont tous exclusifs.
RW-LATCH :verrouillage en lecture-écriture
loquet compréhension :
Un exemple :
Lorsque nous exécutons select , les données sont mises en cache dans pool de tampons Oui, plusieurs threads accédant ou modifiant simultanément ces données doivent nécessiter un mécanisme de contrôle de concurrence. Il s'agit du latch.
Les données auxquelles la base de données doit accéder doivent d'abord être stockées dans le cache, et le cache est généralement plus petit que l'espace disque. Le tampon de données utilise la table hash pour enregistrer si le. la page de données est en mémoire. Le RW-Latch correspondant dans MySQL est très bien dit dans errlog Clairement , le RW-Latch est dans buf0sea.cc à la ligne 658 Créé par RW-Latch.
Regardez l'exemple de test de stress du errorlog :
Selon le journal, nous pouvons analyser ce fil 140140355766016 veut ajouter un verrou x à l'enregistrement, mais le fil d'attente 0x4c407b8 Sortie du RW-Latch du fil.
verrouillageProcessus de contenu
1) a accéder à la liste chaînée avec x
2)b Faire la queuexdéverrouillé occupé cpu, mais cpu vous a trouvé Attendez, donc cpu expulsera b hors du
3) temps de la chaîne, il est temps de chercher des données.
4)bJe connais très bienarapidement donc, b Ne faites pas la queue, c'est pour aller en spin , c'est-à-dire inactif cpu, puis allez le revoir Vérifiez la structure des données de la mémoire, a est déverrouillé
5) b transféré Après un tour, dans la période de bspin, c est entré et Après la rotation, généréos attend
6) Le système d'exploitation b Kick loquet du
cpuFonctionnalités de verrouillage :
1.Pas de file d'attente
2.
Structure de la mémoire Très petite La base de données est demandée à partir du système d'exploitation et n'occupe pas le pool de tampons, complètement exclusif
Le processus de maintien du verrouillage mutex :
Un thread détient un 1
bLe fil voit que la structure des données de la mémoire a des nombres, puis il passe à spin
confirm latch type de contention :
(il s'agit de l'instruction 173 dans le code source) obtenu par le journal des erreurs
loquetLe processus de contention
Il existe un mécanisme de protection de chaîne sur la liste chaînéeloquet , une petite structure de mémoire, à ce moment, un fil de lecture a vient lire la chaîne A ce moment, la gestion devient r. , verrou de lecture, Lorsque des données sont trouvées sur la chaîne (lecture), relâchez le verrou de lecture dès qu'il est trouvé, b doit également être lu lorsqu'il apparaît. À ce moment, il ressemble à r. peut être partagé, et elle accède et lit également la chaîne, c vient modifier le contenu de deux blocs de la chaîne. Il s'avère que c'est r, r et w s'excluent mutuellement et ne peuvent pas être exécutés en même temps, non plus 1
, demande activement de quitter lecpu 2
, occupant uncpu vide ressources (exécuter un code vide, boucle, vérifier au bout d'un moment si a et b ont été utilisés (spin), mais dans ce processus, car c n'est pas mis en file d'attente pour attendre, d'autres threads peuvent venir occuper la chaîne en attendant. S'il est exécuté plusieurs fois, ce sera toujours comme ça, peut-être sommeil, quittez <.>cpu) Pourquoi est-il inactif (peur que le système d'exploitation l'entraîne de force quand il voit son oisiveté) , etc. (Parce qu'il sait que a et b occupent des ressources pendant un temps relativement court, c'est-à-dire que le temps pour parcourir une chaîne est très court). latch Phénomène de contention :
1,
latch la contention apparaîtra comme cpuOccupé2,
latchLe contenu n'est pas en file d'attente, attendez une période aléatoire Revenez et jetez un oeil à l'heureIndicateurs de suivi
----------
SÉMAPHORES----------OS WAIT ARRAY INFO : nombre de réservations 2OS WAIT ARRAY INFO : nombre de signaux 2RW-partagé tours 0, tours 4, OS attend 2RW-excl tourne 0, tours 0, OS attend 0RW-sx tourne 0, tours 0, OS attend 0 Faire tourner des tours par attente : 4,00 RW-partagé, 0,00 RW-excl, 0,00 RW-sxtours
signifie demander les paramètres de la rotation à chaque fois
os attend : signifie sommeil Lorsque la croissance soudaine est relativement rapide, cela signifie qu'il y a une contention loquet. sérieux
spin partagé en rw fois
spin en rw-exclnombre de fois
verrouCauses de contention
1, accès à la mémoire trop fréquent (continuez à chercher)
2, listeLa chaîne est trop longue (si 10000 sont accrochés à la chaîne, les chances d'être retenu sont trop élevées)
Donc, parfois, nous augmentons le nombre d'instance et coupons le grand pool en plus petitspool , raccourcissez la chaîne liste
Comment réduire les conflits de loquet :
Si le conflit latch est sérieux
1.Optimisersql, réduisez le nombre de mémoire lit——L'effet est plus évident
2.Augmentationinstances Le nombre de
Comment trouver avec précision la solutionloquet
1.show moteur Innodb mutex
2 .Vérifiez quel type deloquet
3.Localisezsql
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!