MySQL Learning - Logging System Redo log and Bin log

Tang yuanxue Java 2021-11-25 17:40:36
mysql learning logging redo log

「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

Préface

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

Table des matières

  1. redo log
  2. bin log
  3. change buffer
  4. Processus d'exécution du Journal
  5. redo log Et bin log La différence entre

Texte

1. redo log

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:

image-20211123164303658

C'est enregistré. 1Après les données,write_point Qui se déplace vers l'avant 1Une fois,Etcheck_pointNe bouge pas:

image-20211123164729273

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.;

2. bin log

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 ;

3. change buffer

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 :

  1. Opération de mise à jour: L'opération de mise à jour écrit d'abord l'enregistrement de mise à jour à change_buffer, Puis synchronisez - vous avec redo log;
  2. Opération de lecture:Si danschange buffer Lire les données , Il faut d'abord changge buffer Les pages sales sont brossées sur le disque et lues ;Si danschange buffer Aucune donnée correspondante n'a été lue dans , Alors continue. redo logRecherche dans;
  3. DisqueIO:change buffer Mettre l'accent sur la réduction du nombre de lectures aléatoires sur disque ,Etredo log Concentrez - vous sur la réduction du nombre d'écritures aléatoires sur le disque ;Parce que si ce n'est pas le cas,change buffer, Donc chaque opération de mise à jour lit le disque et est aléatoire , Il en résulte une faible efficacité ;

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;

4. Processus d'exécution du Journal

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
  1. L'actionneur est d'abord sorti du moteur de stockage id=1 Cette ligne de données : Si la page de données sur laquelle se trouve cette ligne de données est en mémoire ,Retour direct à; Si elle n'est pas en mémoire , La page de données correspondante doit d'abord être lue à partir du disque ,Et revenir à;
  2. Une fois que l'actionneur a reçu les données retournées par le moteur ,Va correspondre àageSet to10, Et mettre à jour les pages de données en mémoire , En même temps, conservez le dossier d'opération à redo logMoyenne,En ce momentredo logInprepareStatut;
  3. Ensuite, stockez l'enregistrement de l'opération dans bin logMoyenne;
  4. L'actionneur final engage la transaction ,En ce momentredo logDevientcommitStatut, Cette mise à jour est terminée ;

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 ;

5. redo log Et bin logLa différence entre

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

Résumé

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.

版权声明
本文为[Tang yuanxue Java]所创,转载请带上原文链接,感谢
https://javamana.com/2021/11/20211125174016402h.html

  1. http://lx.gongxuanwang.com/sszt/32.htm
  2. 回顾我两个月面试阿里,携程,小红书,美团,网易等等(Java岗)
  3. JavaScript高级程序设计读后感(一)之零碎知识点查漏补缺
  4. http://lx.gongxuanwang.com/sszt/7.htm
  5. #yyds干货盘点#设计模式之【工厂模式】
  6. Java * SpringBoot实现万能文件在线预览,已开源,真香
  7. Redis | 第4章 Redis中的数据库《Redis设计与实现》
  8. Redis | 第4章 Redis中的数据库《Redis设计与实现》
  9. 关于centos docker版本过低导致 is not a valid repository/tag: invalid reference format
  10. Redis 源码简洁剖析 02 - SDS 字符串
  11. 回顧我兩個月面試阿裏,攜程,小紅書,美團,網易等等(Java崗)
  12. Rétrospectivement, j'ai passé deux mois à interviewer Ali, ctrip, Little Red Book, meituan, NetEase, etc. (Java post)
  13. Docker + webhook Automation Deployment Front End Project
  14. Java技术之Spring、Hibernate框架整合方法
  15. http://lx.gongxuanwang.com/sszt/32.htm
  16. 亚马逊自己的 Linux 发行版现在完全基于 Fedora 了
  17. Redis 源码简洁剖析 02 - SDS 字符串
  18. Java技術之Spring、Hibernate框架整合方法
  19. Méthode d'intégration des cadres de printemps et d'hibernation de la technologie Java
  20. Redis source Concise Analysis 02 - SDS String
  21. La distribution Linux d'Amazon est maintenant entièrement basée sur Fedora
  22. org.springframework.web.bind.MissingServletRequestParameterException
  23. Built in constraints and functions of MySQL Foundation (2)
  24. Basic operation of MySQL Foundation (I)
  25. Introduction to Java zero foundation 3: Java data types
  26. 从零开始搭建EasyDarwin环境——Linux系统开发环境搭建Golang
  27. Redis source Concise Analysis 02 - SDS String
  28. Construire l'environnement easydarwin à partir de zéro - - construire l'environnement de développement du système Linux golang
  29. javaweb代码是正确的,但是第一行代码就报错了
  30. **** | Java | 后端开挂:3行代码写出8个接口
  31. Java || 看了大二学长写的代码,我竟开始默默的模仿了。。。
  32. Java | 手把手教你实现一个抽奖系统(Java版)
  33. Java | Manuel pour vous apprendre à mettre en œuvre un système de loterie (version Java)
  34. Java | | après avoir lu le Code que j'ai écrit en deuxième année, j'ai commencé à imiter silencieusement...
  35. Java | back - end Pending: 3 - line Code write 8 Interfaces
  36. Le Code Web Java est correct, mais la première ligne de code est incorrecte
  37. Android网络编程之Http通信
  38. Android網絡編程之Http通信
  39. Http communication for Android Network Programming
  40. 数据结构实验八 领会图的两种主要储存结构和图的基本运算算法设计
  41. Hibernate数据校验简介
  42. The story of spring
  43. Il a dépensé 270 000 yuans pour soulever Xiaopeng p7 et a parcouru 3 627 km. Le propriétaire du véhicule a partagé 6 avantages et inconvénients.
  44. 阿里蚂蚁花呗团队面试题:spring+分布式+jvm+session+redis
  45. 【Java入门100例】14.字符串排序——compareTo()
  46. 【Java入门100例】13.修改文件扩展名——字符串替换
  47. Leetcode 79. Word Search [C + + / java detailed problem]
  48. Introduction à la vérification des données hibernantes
  49. Expérience de la structure des données
  50. Spring cloud gateway practice 2: more routing configuration methods
  51. Java network programming - summary overview
  52. 基于语法树的 Java 代码自动化插桩
  53. 云原生 Spring Boot 应用配置 Prometheus + Grafana 监控(保姆级)
  54. Spring cloud gateway practice 2: more routing configuration methods
  55. Jenkins file one line of code to deploy. Net program to k8s
  56. Java network programming - summary overview
  57. Cloud Native Spring Boot application configuration Prometheus + grafana Monitoring (baby - sitter)
  58. Insertion automatique de code Java basée sur l'Arbre syntaxique
  59. Le SUV phare de Xiaopeng, Xiaopeng G9, a fait ses débuts au salon de l'automobile et s'est tenu en position C dans la nouvelle force?
  60. Docker 从入门到实践系列四 - Docker 容器编排利器 Docker Compose