「C'est ma participation11Le défi du mois de juin25Oh, mon Dieu.,Voir les détails de l'événement:2021Un dernier défi」
Auteur:Tang Yuan
Blogs personnels:javalover.cc
redo log Et bin log Ces deux systèmes de journalisation,Est utilisé pour stocker les opérations de mise à jour,Mais ils les stockent différemment;
redo log Quelles modifications ont été apportées au stockage primaire,Comme mettrename="javalover"Modifier comme suit: name="admin";
Etbin log Non seulement stocker les modifications apportées,La logique originale modifiée est également stockée,Par exemple,update t set name=admin where id=1
,Cette déclaration etname="admin"Dernière valeur.
Voici le déroulement du travail et la différence entre les deux
redo log Redo log, Il appartient au niveau du moteur de stockage ,- Oui.InnoDB Unique ,MyISAMLe moteur ne supporte pas;
Taille de l'espace:
redo log La taille de l'espace occupé est fixe ,Par exemple, nous donnonsredo logC'est attribué.4Fichiers,Chaque fichier occupe1G,Alorsredo log La taille fixe de 4G;
Quandredo log Quand il est plein, L'opération de fusion est effectuée ,Oui.redo log Les enregistrements sont fusionnés sur le disque de base de données ;
Il y a aussi un WALLe concept de;
WALMécanismes:
Nom complet write ahead logging
, En gros, ça veut dire d'abord écrire un journal ,Réécrire le disque, Le but est d'améliorer les performances ;
Parce que si chaque opération de mise à jour doit être écrite sur le disque , Il faut d'abord extraire la page de données du disque ,Puis mise à jour, Enfin écrit sur le disque ;
C'est comme ça., Randomisation des disques IOÇa va coûter cher.;
Donc à traversWALMécanismes, Notez d'abord l'opération de mise à jour à redo logMoyenne, Et pendant que le système est inactif , Puis fusionner sur le disque , La fusion à ce stade est écrite séquentiellement ,DisqueIOTrès peu coûteux;
write_point Et check_point:
write_point Point d'écriture Et check_point Effacer les points , Peut être compris comme deux pointeurs ,write_point Responsable de l'emplacement de l'enregistrement à écrire ,Etcheck_point Responsable de pointer vers la position à effacer ;
Imaginez ces deux points comme un crayon et une gomme ;
Au début,, Les deux pointeurs font référence à redo logPoint de départ,Comme suit:
C'est enregistré. 1Après les données,write_point Qui se déplace vers l'avant 1Une fois,Etcheck_pointNe bouge pas:
Lorsque l'enregistrement est complet , Impossible de continuer à écrire ,check_point Qui se déplace vers l'avant , Fusionner les enregistrements dans la base de données , Et effacer cette partie de l'enregistrement ;
crash-safe:
C'estcrash-safe,C'est quandMySQL Redémarrage anormal du Service , Les documents soumis antérieurement ne seront pas non plus perdus ;
C'estcrash-safeEst basé surredo logRéalisé,Etredo logEncoreInnoDBSpécifique au moteur, C'est pourquoi nous recommandons souvent InnoDBMoteur,Parce que c'est plus sûr.;
bin log Archiver le journal,DeServiceQuelque chose de stratifié, Pas de moteur de stockage ;
C'est - à - dire:bin logNon seulement pour soutenirInnoDBMoteur,Il soutient égalementMyISAMMoteur;
Maintenant qu'il y aredo log Pourquoi? bin logEt alors??
En fait, c'était le premier. bin log, Plus tard. redo log;
Au début,,MySQL Le moteur de stockage pour MyISAMMoteur,EtMyISAM Le moteur ne supporte que bin log, C'est - à - dire le Journal d'archives , Il n'a pas crash-safeCapacité de;
Et puis il y aInnoDBMoteur,Il soutientredo log Redo log, C'est tout ce qu'il faut. crash-safeCapacité;
On dirait quebin log Ça ne sert à rien. ,Alors pourquoi?MySQL Ne pas annuler directement bin logEt alors??
Parce qu'il y aMySQLToujours avecMyISAMMoteur,Annulez.bin logEt si, Alors ils n'ont même pas le journal de base ;
Nous avons une introduction à l'article précédent change buffer, Lors de l'opération de mise à jour , Les enregistrements de mise à jour sont stockés dans change buffer;
C'est...change bufferEtredo logQu'est - ce que ça peut faire??
Commençons par le même endroit : En fait, leur but est le même , Tout ça pour réduire les disques IOFonctionnement;
Ensuite, il y a différents endroits :
En fait, en résumé , Lire ou écrire , Tout d'abord. change bufferOpération centrale, Et puis on verra si on y va redo logOpération centrale;
Nous analysons ici les énoncés suivants à titre d'exemple : Supposons ici que le système utilise deux journaux redo logEtbin log
update t set age=10 where id=1;
Copier le Code
Il s'agit d'un concept de soumission en deux étapes ;
Soumission en deux étapes:
C'est vrai.redo logDis, Ce n'est pas écrit en une seule fois , Mais deux fois. ;
Défini à prepareStatut, Et j'ai attendu bin logÉcrire le journal;
Attendez.bin logAprès une écriture réussie, Transaction à soumettre ,En ce momentredo log Réglé par le moteur à commitStatut;
L'objectif est d'assurer la cohérence des transactions ,C'est - à - dire:redo logEtbin log Ont un dossier de mise à jour cohérent ;
Tout ce qui précède couvre , Voici un tableau pour illustrer ,Plus clair:
redo log | bin log | |
---|---|---|
Moteur de stockage | InnoDB | InnoDB, MyISAM |
MySQLCouche de schéma | Niveau moteur de stockage | ServiceNiveau de service |
Mode de stockage | Journal physique, Quelles modifications ont été apportées au stockage | Journal logique, .Stocke les énoncés logiques modifiés et les résultats |
Occupation de l'espace | Taille fixe, Vider une partie de l'enregistrement après l'avoir rempli | Ajouter une écriture |
redo logDeInnoDBSpécifique au moteur,Soutiencrash-safe,C'est - à - direMySQL Après un redémarrage anormal du Service , Les enregistrements de données soumis précédemment peuvent également être trouvés ;
bin logDeServiceCouche, Tous les moteurs sont pris en charge ,Taille non fixée, Ajouter une écriture ;
change buffer Et redo logComplémentaire: Les données de mise à jour sont d'abord écrites à change buffer,Réécrireredo log; Demande d'abord les données. change bufferCherche., Je ne peux pas le trouver. redo logCherche.