当前位置:网站首页>MySQL Redo log Redo log

MySQL Redo log Redo log

2022-06-23 06:56:00 Débutant

Un.、Introductionredo log

Dans les affairesACIDDans les propriétés,Atomicité(A)、Cohérence、Persistance(D)Parundo logEtredo logRéalisation,Isolement(I)Par la serrure+MVCCRéalisation

undo log:Les affaires n'ont pas encorecommit,Exception à mi - parcours,Peut être utiliséundo logRestaurer les données à l'état avant l'exécution de la transaction,Assurez - vous que la transactionAtomicité

redo log:ServicescommitSuccès,Comme il faut du temps pour mettre à jour les données du disque,En cas d'exception,Peut être utiliséredo logPour reprendre la transactionSQL,Assurez - vous que la transactionPersistance(Tant que les affairescommitSuccès,Quoi qu'il arrive,La prochaine foisMySQLLe service fonctionne normalement,La dernière foiscommitLes données doivent être récupérées)

2.、redo logConcept

redo log:Redo log/Journal physique,Utilisé pour enregistrer les changements dans les opérations de transaction,Les enregistrements sont finalement modifiés et stockés par pagePage de données,DirectÉtat final des données stockées,Utilisé pour assurer la transactionPersistance

undo log:Appelé log logique,Ce qui est stocké est spécifique àSQLDéclarations.Si ce qui se passe maintenant estinsert,Exécutez quand vous retournezdelete; Si c'est fait maintenant update, Juste pour reprendre l'ancienne valeur updateReviens!

redo logPar défaut à/var/lib/mysqlEn bas.
Insérer la description de l'image ici
redo log C'est une affaire begin L'enregistrement commence à l'heure ( Ce n'est pas une affaire commitEnregistrer seulement quand, Parce que toute la transaction peut faire beaucoup d'opérations ,Si danscommit C'est écrit quand redo log, Une fois l'exception survenue ,redo logPas encore écrit., C'est trop tard , Impossible d'assurer la durabilité de la transaction ),Les transactions sont enregistrées, qu'elles soient engagées ou non.,En cas d'exception( Comme une panne de courant pendant la persistance des données ),InnoDBSera utiliséredo logRetour à l'heure avant la panne de courant,Assurer l'intégrité des données

innodb_log_buffer_sizePar défaut16M(MySQL 5.7),C'estredo logTaille du tampon, Ça commence avec la transaction ,Commence à écrireredo log, Si la transaction est plus importante , Pour éviter de dépenser trop de disques pendant l'exécution de la transaction IO,Peut être plus grandredo logCache,Enregistrer le disqueIO. Il y a une chance de rafraîchir le disque , Prenez le disque au bon moment IO,SibufferPlus gros., Le temps de rafraîchissement sera plus lent ,Plus efficace.
Insérer la description de l'image ici
InnoDB Modifier les données opérationnelles , Ne pas modifier directement les données sur le disque , Ce n'est qu'une modification Buffer PoolDonnées dans.InnoDBToujours en premier.Buffer Pool Changement de données enregistré dans redo logMoyenne, Pour récupérer les données après un crash . Dossiers prioritairesredo log, Et puis trouver le temps de Buffer Pool Rafraîchir les données sales sur le disque .

innodb_log_group_home_dir Deux fichiers dans le répertoire spécifié :ib_logfile0,ib_logfile1, Ce fichier est appelé Redo log

buffer poolPool de cache: Cache d'index amovible 、Cache de données, etc., Lecture et écriture accélérées , Manipulation directe de la page de données ,Écris.redo log La modification est terminée , Il y a des fils spéciaux pour faire buffer poolDansdirty pageÉcrire sur le disque

buffer poolLa taille par défaut est134M(MySQL 5.7)
Insérer la description de l'image ici
Structure du cache:
Insérer la description de l'image ici

Lecture des transactions, Les modifications sont toutes des données dans le pool de cache des opérations prioritaires .Dans le projet réel,mysqld Il va courir seul sur une machine , Une grande quantité de mémoire peut être allouée spécifiquement pour InnoDBDebuffer pool,Plus vite.CRUD

Trois、Disque、Structure du cache

Insérer la description de l'image ici

Quand on fait une mise à jour des données 、 Quand les données sont manipulées ,Après le début de la transaction, Au fur et à mesure que les données s'exécutent sql, Toute modification finale des données est enregistrée en premier dans redo logOui.,Pour les données、 Les modifications de l'index sont enregistrées dans Buffer PoolÀ l'intérieur.

Quand les affairescommitQuand, L'opération sur le diagramme est de mettre InnoDB Log Buffer Le contenu est écrit sur le disque ,Si ça marche.,Sur le disqueredo log L'état sera enregistré ——commit, Si ça n'a pas marché ou si c'est fini , Enregistrer l'état ——prepare

log Une exception peut également se produire lors de l'écriture sur le disque , Problèmes tels que les coupures de courant , A conduit à écrire redo log Je n'ai pas fini d'écrire ( C'est l'équivalent d'une transaction sans commitSuccès),En ce momentMySQL Il n'est pas nécessaire de tenir compte de l'intégrité de cette transaction la prochaine fois qu'elle est récupérée , Parce que l'état n'est pas commit, Tout est écrit sur le disque pour indiquer redo logÉcrit avec succès, L'état devient commit.L'état devientcommit Pour les opérations de maintenance ultérieures ACIDCaractéristiques.

  1. C'est ça?commitQuand,buffer poll Les données sales à l'intérieur (Données modifiées) Avant d'être écrit sur le disque ?
    Pas besoin d'attendre.commit Ça a commencé quand . La transaction peut modifier une grande quantité de données , Et la capacité de cache est limitée ,Pourbuffer pollDonnées mises en cache, Il y aura des fils dédiés au bon moment , Rafraîchir le disque , En cas de panne de courant ,La prochaine foisMySQLAprès le démarrage,Sera basé surredo log Données enregistrées à l'intérieur ,Récupération des données.
  2. undo log C'est aussi enregistré dans redo logMoyenne
    undo logSupport transaction ROLLBACK, Et ce n'est pas tout en un instant , Enfin, les données sur le disque , Pour éviter une exception pendant le processus de retour en arrière ,Alors...undo log Pour enregistrer dans redo logÀ l'intérieur.ServicescommitSuccès ourollbackSuccès,Pour le rez - de - chaussée, Tout a été écrit avec succès redo logÀ l'intérieur.
  3. Qu'est - ce qui est réel?commitSuccès?
    Au lieu de brosser toutes les données sur le disque ,Mais... Opération complète d'enregistrement des transactions redo logDelog bufferÉcrire sur le disque,Encore L'état des données modifiées est défini à commit C'est une transaction réalisée commitSuccès. Bien que les données soient encore buffer poll, Mais tant que notre redo logEnregistrer complètement, Les données peuvent être récupérées , Il y aura des fils spéciaux pour prendre en charge buffer poll Les données sont écrites sur le disque , Les données sont mises à jour sur le disque , Des conditions anormales comme une panne de courant se produisent ,La prochaine foismysqldAprès le redémarrage du serveur,Sera basé surredo log Données enregistrées à l'intérieur .Récupération des données.

Lorsque la transaction est en cours , Toujours écrire en premier redo log, Et puis il y a écrit buffer pool;Transaction réussiecommit,C'est pour s'assurer queredo log Enregistrement complet sur disque

En ce qui concerne les modifications des données du tableau ,buffer pool Est - ce que la page de données Sales de est rafraîchie sur le disque , On n'a pas à s'inquiéter ,Tant queredo log Écrivez tout sur le disque ,On peut passer n'importe quandredo log Refaire le journal pour récupérer la transaction a réussi commitÉtat des données pour

Le plus important dans la base de données est le journal ,Pas les données.

原网站

版权声明
本文为[Débutant]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/174/202206230559262196.html