Quelques années plus tard, en tant que magnon, j'ai enfin compris le journal MySQL!Ensemble complet de tutoriels Baidu Cloud

Cxyyidd 2021-08-19 22:48:32 阅读数:26

quelques ann es tard en

Seulement siredo logL'état estprepareHeure,Pour vérifierbinlogExiste - t - il?,Sinon, vérifiez seulementredo logOui Non commitC'est bon. Comment vérifierbinlog:Une chose entièrebinlogIl y a un format fixe à la fin.

6.5 Redo log Temps de brosse

Undo logLe moment de la brosse etRedo logPresque.,Mais pourUndo logJe n'ai pas trouvé la conception correspondante des paramètres du disque de brosse,Alors ne mentionnez plus.Redo logÉcris d'abord à chaque foisRedo Log BufferMoyenne,Ensuite, la brosse est contrôlée par le moment de la brosseOS BufferL'heure et le temps de glisser dans le disque journal.

image

InUndo LogMoyenne,MySQLC'est à travers les paramètresinnodb_flush_log_at_trx_commitPour contrôler le timing de la brosse,La valeur est0、1Et2Trois valeurs.0Indique qu'une fois la transaction engagée,Écrivez toutes les secondesOS BufferEt appellefsync()Écrit sur le disque journal;1Indique que chaque engagement de transaction est écritOS BufferEt appellefsync()Écrivez le journal sur le disque journal.2Indique que chaque engagement de transaction est écrit àOS Buffer,Appelé toutes les secondesfsync()Écrire sur le disque journal.Les paramètres visibles sont1 C'est le plus sûr. , Est également la valeur par défaut .

image

6.6 Redo log Mode de stockage

image

L'image ci - dessus est sur le disque Journal Redo log Dessin de l'anneau ( Écris à partir de zéro. , Écrivez à partir de la fin ~Cycle).write posEtcheck point Deux pointeurs. ,write pos Pointeur vers l'endroit où le fichier journal courant est écrit ,check point Pointeur vers la position de départ actuelle à effacer . La partie verte de l'image peut être écrite Redo logLocal, Chaque écriture ,write pos Le pointeur se déplace dans le sens des aiguilles d'une montre , Bien sûr que non. check pointPointeur coïncident,Parce queMySQL Il y a un mécanisme pour y parvenir. , Chaque point de contrôle de déclenchement checkpoint,check point Avance le pointeur ,Ce processus nécessite le brossage des journaux et des disques de données, Enregistrement correspondant LSN, Points difficiles LSN.

6.7 Redo Log Points de contrôle

Quand les points de contrôle seront - ils déclenchés? checkpoint, J'ai trouvé des informations sur Internet. : Quand la base de données déclenchera le point de contrôle checkpoint

image

Checkpoint Quand cela s'est produit 、 Les conditions et le choix des pages sales sont très complexes. .EtCheckpointCe que vous faites, c'est simplement brosser les pages sales du pool tampon sur le disque,La différence est le nombre de pages qui sont mises à jour sur le disque à la fois, Où puis - je trouver des pages sales à chaque fois? , Et quand Checkpoint. Ces articles ne seront pas étudiés .

6.8 Redo Log LSN

LSNCe concept,C'est compliqué., Vous n'avez pas à comprendre. !LSN Numéro de série logique appelé Journal (log sequence number),IninnodbDans le moteur de stockage,lsnOccupation8Octets.LSN La valeur de augmente avec l'écriture du Journal . C'est facile à comprendre. SLNC'est combien d'octets ont été générés depuis le débutRedo logValeur.

Les deux pointeurs sont stockés à travers LSN Calculer la position de pointage ,Parce queLSN La taille du fichier est enregistrée en octets , Lorsque la taille du fichier est dépassée , Les deux positions du pointeur doivent être calculées à l'aide d'un moule. , La prise de module permet d'écrire à partir de zéro , Cela fait deux pointeurs dans un fichier , Toujours en position de cycle , Le processus de rattrapage .C'est ça.Redo log Conception et mise en œuvre de la logique circulaire .

Comme indiqué ci - dessusLSNC'est compliqué., Parce qu'il a beaucoup de valeurs ,Saisissez les commandes"show engine innodb status;", On en voit quatre. lsnEnregistrement

image

Pour faciliter l'identification , Je les ai tous renommés. ,Comme suit. Les noms ne se souviennent pas. , On ne peut pas aller plus loin.

  1. Journal de mémoire :redo log buffer lsn; Journal du disque :redo log file lsn;

La relation générale est :redo log buffer lsn >= redo log file lsn, Si le temps de brossage est 1,Etredo log buffer lsn = redo log file lsn.

  1. Page de données de mémoire :data buffer lsn; Page de données du disque de données :data disk lsn;

La relation générale est data buffer lsn > data disk lsn, Si le disque de données a été brossé ,Etdata buffer lsn = data disk lsn.

  1. Points de contrôle:chckpoint lsn;

La plaque de brosse du point de contrôle est mentionnée plus loin , Brosse à données et brosse à journaux ( S'il y a une brosse à journaux :Cela signifie que je suppose que la valeur de réglage du temps de la brosse de journal n'est pas1,Pour1Est synchrone, C'est - à - dire toujours redo log buffer lsn = redo log file lsn, Le disque de journal de brosse n'est pas déclenché par le point de contrôle ).

Dis - le.Redo log C'est un enregistrement circulaire. , Comment l'avez - vous enregistré? ? Combinaison ci - dessous LSN Donner un diagramme fictif du processus d'enregistrement , Peut être comparé 6.6 Redo log Schéma de stockage Connaissances pertinentes: Disque Journal + redo log file lsn + checkpoint lsn + Double pointeur(write pos、check point)

1-8 Se produit dans l'ordre chronologique .1 Le point est de supposer l'état initial ;2、3 Cliquez sur le disque Journal ;4 Le point de contrôle est déclenché. checkpoint, Brosser le disque ,checkpoint lsn=1C'est parti., Fin de la brosse et mise à jour checkpoint lsn=512.In5Point、6 Le point a traversé un cycle de mémoire 、 Mémoire à deux cycles , Écrire à partir de zéro log, Les deux pointeurs pointent vers la tête. .No7 Le point est aussi un déclencheur checkpointProcessus.9 Le point est de supposer qu'il n'y a pas de mise à jour , Résultat final équilibré ,C'est - à - dire que les pages de données et les journaux en mémoire sont brossés.

image

Tout le processus :

Dans certains cas,Déclencheurcheckpoint, Déclenche le brossage de la page de données et de la page de journal , Les données sales en mémoire sont maintenant —“ Page sale des données "Et" Log Dirty Data ” Brosser sur le disque de données et le disque de journal respectivement , Et les deux roulent à des vitesses différentes .checkpoint Mécanismes de protection , Lorsque la vitesse de brossage des données dépasse la vitesse de brossage des journaux , Le pinceau de données sera temporairement arrêté , Attendre que le pinceau de journal dépasse le pinceau de données .

Lors du brossage du disque , Pour les disques de données , Tout est en mémoire. ,À ce moment - là, une page de données est mise à jour à la page de données de mise à jour de la mémoire à la foisdata disk lsnPourdata buffer lsn( Lors de la mise à jour de la page de données mémoire ,Sera mis à jourdata buffer lsn).

Pour le disque Journal , Sauf pour l'enregistrement. checkpoint lsn La valeur de est le point de contrôle checkpointValeur de( Doit être à la fin Enregistrer une valeur directement ,C'est rapide.), C'est pour le journal. 1(1 Est un pinceau de journal de brosse de cache synchrone )Heure,.Et le journal n'a pas ét é brossé sur le disque Journal, vous devez déclencher le brossage du journal dans le cache sur le disque Journal à l'avance, Le redo buffer log Brosse. redo log file Mise à jour redo log file lsnPourredo log buffer lsn .

Avant et après le déclenchement du point de contrôle analogique , Changements dans l'ensemble du processus , Une page de données et un journal , Changements dans les données et lsnDe179-180 Graphique de variation ( Le temps de brosser le disque n'est pas 1)

image

6.9 Redo log Processus de reprise après sinistre et LSN

Union6.4 Redo log Processus de reprise après sinistre et 6.8DeLSNConnaissances, Affiner à nouveau 6.4DeRedo log Processus de rétablissement

RedémarrerinnodbHeure,Redo log Incomplet ,Adoption6.4 Processus de connaissance .AvecRedo logReprise, Lors du démarrage de la base de données ,InnoDB Les pages de données du disque de données sont numérisées data disk lsn Et des disques journaux checkpoint lsn. Si les deux sont égaux, checkpoint lsn Début de la récupération , Le processus de rétablissement utilise redo logÀbuffer pool,Jusqu'àcheckpoint lsnégal àredo log file lsn, La restauration est terminée .

Sicheckpoint lsn Moins de data disk lsn,Description la base de données a été désactivée avant que le brossage ne soit terminé après le déclenchement du point de contrôle.Parce quecheckpoint lsn La valeur la plus récente n'est enregistrée qu'après la fin du brossage des données ,Une partie des données a été brossée sur le disque de données après le point de contrôle,La récupération partielle de la partie du disque de données qui a été écrite à ce moment ne sera pas refaite, Passer directement à non récupéré lsn La valeur commence à récupérer .

Sept、Compris. ChangeBuffer

7.1 Pourquoi? ChangeBuffer

Pourquoi j'en parlerais? ChangeBufferEt alors?, En fait, la plupart du temps, ChangeBufferEtRedo log C'est pas vrai. , Les deux utilisent la mémoire ,Réduire les disquesIO,Pour ne pas m'embrouiller, j'ai pensé qu'il était nécessaire d'en parler spécifiquement.

7.2 ChangeBuffer Concept et rôle

C'est moi. ChangeBuffer Une brève introduction à

image

C'est - à - dire pour les opérations de mise à jour , S'il est utilisé ChangeBuffer,La page de données sur laquelle se trouvent les données mises à jour si elles ne sont pas en mémoire, Les pages de données seront lues en mémoire sans disque de données , Au lieu de cela, enregistrez cette opération dans ChangeBufferMoyenne,ChangeBuffer La principale économie est la lecture aléatoire du disque IO Consommation, Utilisé la prochaine fois que la page de données est lue, comme la requête de lecture ChangeBuffer Enregistrement dans . En fait, c'est aussi une idée d'utilisation intelligente de la mémoire. .

7.3 ChangeBufferAvecRedo logLa différence

Redo log L'économie principale est l'écriture aléatoire sur disque IO Consommation(Écrire dans l'ordre),Et ChangeBuffer La principale économie est la lecture aléatoire du disque IO Consommation.

Qu'est - ce que ça veut dire? , Regarde en bas. :

Redo log Avec ChangeBuffer( Avec persistance du disque ) Voilà.2 Mécanismes ,La différence réside dans l'optimisation des différentes étapes de l'ensemble du processus de changement.

Ne pense pas. Redo log、ChangeBufferMécanismes, Simplifier l'abstraction une mise à jour (insert、update、delete)Processus:

  1. Lire la page de données sur laquelle se trouve la ligne à modifier à partir du disque, Lire dans la page mémoire

  2. Pour les lignes de la page mémoire , Effectuer une opération de changement

  3. Modifier la page de données , Écrire sur le disque de données

Parmi eux, Étapes du processus 1 Impliquant des disques de lecture aléatoires IO;Étapes3 Impliquant des disques d'écriture aléatoires IO; Ça correspond. ChangeBufferEtRedo log.

Comprendre la réponse à cette phrase :

  • ChangeBufferMécanismes, Étapes optimisées 1—— Éviter la lecture aléatoire des disques IO , Écrire une opération sur une page de données qui n'est pas en mémoire ChangeBufferMoyenne, Au lieu de lire la page de données du disque dans la page mémoire

  • Redo logMécanismes, Étapes optimisées 3—— Évitez d'écrire des disques au hasard IO, Écrire au hasard sur le disque , Optimiser pour écrire des disques séquentiels (Écris.Redo log,Assurez - vous quecrash-safe)

7.4 Ça marche? ChangeBufferPourRedo logLa différence entre

Redo logMécanismes,Pour garantircrash-safe, Je l'ai toujours utilisé. . C'est inutile. ChangeBufferMécanismes,Pourredo log La différence est que —— Oui.ChangeBuffer Mécanisme ,InRedo log Ce changement est enregistré dans ,C'est un enregistrement.new change buffer itemInformations pertinentes, Plutôt que d'enregistrer directement les changements de page physique ( La section 8 illustre ce processus. ). Nous mysql innodbMoyenne, ChangeBuffer Le mécanisme n'est pas toujours appliqué ,Seulement si la page de données à utiliser n'est pas actuellement en mémoire, Lorsque la page de données de chargement du disque doit être lue en premier ,ChangeBuffer Il n'y a pas de place pour ça. .

7.5 ChangeBufferDemergeProcessus

image

En plus d'accéder à ces données, il déclenche merge Extérieur,Le système a des fils de fond qui se produisent périodiquement merge.Fermeture normale de la base de données(shutdown)En cours,Sera également exécuté merge Fonctionnement.

merge Processus en trois étapes

  1. Lire la page de données du disque en mémoire(Pages de données des anciennes versions);

  2. De change buffer Pour trouver cette page de données change buffer Enregistrement (Peut - être plusieurs),Appliquer successivement, Obtenir une nouvelle page de données ;

  3. Écris. redo log.C'est redo log Contient des modifications aux données et change buffer Changements.

Huit、 Journal très cohérent U-R-B, Prends - le d'un coup.

Ce qui précède est Binlog、Undo logEtRedo log, Je vais les relier en série. , Afficher tous les journaux dans certains processus .

Encore une fois,Élargissez la description avec quelques exemples des énoncés de mise à jour les plus classiques.

8.1 Données de démonstration de la fabrication

Déclarations d'essai :Insérer une déclaration+ Instruction de requête ,a Les champs sont des index normaux


insert into ta(a,b) values(2,5),(7, 5)2、select * from t where a in (2, 7)

  • 1.
  • 2.
  • 3.

Supposons que les données originales soient les suivantes: , Page de données page1En mémoire,page2Non..Données insérées(2,5)Il est tombé.page1,Données(7,5)Il est tombé.page2Moyenne.

image

8.2 Supposons qu'il n'y ait pas de journal et ChangeBuffer Démonstration

Tous les journaux et ChangeBufferMécanismes, Simplifier l'abstraction une mise à jour insertProcessus

  1. Lire la page de données sur laquelle se trouve la ligne à modifier à partir du disque, Lire dans la page mémoire

  2. Pour les lignes de la page mémoire , Effectuer une opération de changement

  3. Modifier la page de données , Écrire sur le disque de données

image

8.3 Considérez tous les journaux et ChangeBuffer Démonstration–ExistantInnodbProcessus

Le processus est Soumission en deux étapes----- Brosse à journaux ------ Brosse à données (ParticipationRedo log lsn Et ChangeBufferLe contenu de)

8.3.1 Processus de soumission en deux étapes

  1. Données(2,5) Page page1 Mettre à jour la mémoire directement en mémoire ;Données(7,5) Page page2 Pas en mémoire ,Enregistrementchange buffer( Index unique ou non utilisé change bufferLire les pages de données sur le disque dans la mémoire et les mettre à jour).

  2. Écris.undoJournal intime. Écrivez d'abord le cache ,Plus tard, selon les paramètres de brosse, vous décidez quand brosser le disque,Derrière.redo/BinlogC'est pareil.. Brosse à journaux A été mentionné dans chaque journal , Il est lié aux paramètres définis , Voir ci - dessus pour les disques de brosse spécifiques 4.3Et6.5Chapitre, Aucune autre introduction ne sera faite ci - dessous. .

  3. Écris.redoJournal intime( Mise à jour en mémoire , Et puis enregistré en mémoire change bufferChangement)

  4. L'état du journal est changé en preparePhase.

  5. Écris.BinlogJournal intime.

  6. Soumettre une transaction, L'état du journal est changé en commitPhase.

image

8.3.2 merge Processus

Immédiatement après , L'image peut être référencée vers le haut et vers le bas , Supposons que l'instruction de requête soit maintenant exécutée “select * from t where a in (2, 7)” , Index de cette requête a=7La page de données n'est pas en mémoire, Et la dernière mise à jour est déjà en cours change buffer Enregistrement moyen , Déclenchera mergeProcessus( Voir chapitre VII 7.5).

  1. Oui.page2 Lire en mémoire

  2. Appliquer successivementchange bufferRecord in, Obtenir la dernière page de données

  3. Écrireredo, Précédemment enregistré changebuffer Modifications , Modification de la page de données

Quant àchangebuffer Supprimer ou marquer après application ,Etredo Original record in changebufferComment ajuster les changements pour supprimer ou modifier les changements de page de données ici la figure ci - dessous est décrite selon vos propres idées, S'il y a une erreur, laissez un message et corrigez - le. .

image

8.3.3 Processus de brossage des données

Brosse à données flush Il y a quatre cas

  1. InnoDB De redo log C'est écrit..Le système arrête toutes les opérations de mise à jour,Prends ça. checkpoint Avancez.,redo log Laisser de l'espace pour continuer à écrire

Surprise!

Enfin, un ensemble de questions d'entrevue correspondant aux données ci - dessus a été préparé(Il y a une réponse.)Et les questions d'algorithme d'entrevue à haute fréquence pendant l'entrevue(Si l'entrevue n'est pas assez préparée,Alors Concentrez - vous sur ces problèmes d'algorithme,Taux de succès élevé85%+)

image.png

image.png

 Méthode d'acquisition des données:Tapez ici pour recevoir gratuitement

Copyright:Cet article est[Cxyyidd]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2021/08/20210819224539955k.html