Maison  >  Article  >  base de données  >  Qu'est-ce qu'un loquet ? La différence entre loquet et serrure

Qu'est-ce qu'un loquet ? La différence entre loquet et serrure

PHP中文网
PHP中文网original
2017-06-20 15:05:548737parcourir

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

name

affiche 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

cpu

Fonctionnalités de verrouillage :

  • 1.Pas de file d'attente

  • 2.

  • 3.os attend
  • 4.cpu
  • occupé

  • mutex :

 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

b

Le 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 le

cpu 2

, occupant un

cpu 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 2

OS WAIT ARRAY INFO : nombre de signaux 2

RW-partagé tours 0, tours 4, OS attend 2

RW-excl tourne 0, tours 0, OS attend 0

RW-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-sx

tours

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!

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