InnoDB pour expliquer les principes de la transaction

Cet article prêt réalisation d'explication du principe des opérations du moteur de stockage InnoDB de MySQL populaire.

Tout d'abord, nous savons que la transaction a quatre propriétés ACID. A savoir: atomicité, cohérence, isolation, durabilité.

Ces quatre propriétés nous n'avons pas les mots pour élaborer ratatiné, nous avons besoin de connaître une série d'opérations afin d'assurer que la transaction soit toutes exécutées ou non un certain temps une fois que les commits de transaction, ses modifications seront pérennisées qui est enregistré dans la base de données peut.

Ensuite, nous jeter un oeil à la façon de réaliser la transaction InnoDB.

fonction ACD est mis en uvre par trois Redo log (log redo) et Annuler journal. Et l'isolement est réalisé par une serrure. En raison de l'isolement et de verrouillage dans l'article précédent parlé. Par conséquent, le présent document se concentre Redo journal et Undo journal.

A, journal Redo

Redo log pour atteindre la durabilité des transactions, à savoir les caractéristiques D. Il se compose de deux parties:

redo mémoire tampon de journal

  redo fichiers journaux

Jetez un oeil à deux entités correspondantes sur la mémoire et le disque, nous savons que cela est sans aucun doute l'intérêt de l'efficacité, parce que la lecture de la mémoire et de l'efficacité d'écriture que l'efficacité de la lecture de disque et d'écriture trop élevé.

InnoDB support moteur de stockage transactionnel, lorsque les commits de transaction, vous devez d'abord écrire le journal de toutes les transactions de refaire les fichiers journaux, validation des transactions opération soit considérée comme complète est complète toute la transaction. Après chaque referai tampon de journal est écrit redo fichier journal, besoin d'appeler une fois l'opération fsync, car seul le contenu de la mémoire tampon du journal redo est écrit dans le système d'exploitation système tampon, et assurez-vous qu'il n'y a pas écrit directement sur le disque, donc opération fsync doit être effectuée une fois. Par conséquent, les performances du disque dans une certaine mesure, détermine également la performance de la transaction est validée.

A propos de fsync Cette opération peut être intervention de l'utilisateur, puisque chaque validation des transactions sont exécutées une fois fsync, il affecte les performances de la base de données. Pour contrôler le journal redo rincée à la stratégie de disque par innodb_flush_log_at_trx_commit. La valeur du paramètre par défaut est 1, chaque fois que l'opération est effectuée une fois fsync lors de la validation de la transaction. 0 signifie pas commit transaction redo fichier journal est écrit, l'opération d'écriture pour terminer le processus par le thread maître, chaque deuxième thread maître sera opérationnel une fois les fichiers fsync redo log. Deux a dit qu'il refera fichier journal redo d'écriture de journal lorsqu'une transaction est validée, mais seulement le système de fichiers de cache d'écriture ne pas effectuer l'opération fsync. L'utilisateur peut définir à 0 ou 2 améliore les capacités de réclamation soumise transaction peut être fournie pour assurer un fichier journal redo est écrit dans les trois courts méthodes présentent des avantages et des inconvénients.

Il est nécessaire de savoir:

 redo tampon journal enregistrera la mémoire de bloc est écrit sur le disque a quelques règles: lorsque les commits de transaction (mentionné plus haut), lorsque la mémoire tampon de journal dans la moitié de l'espace mémoire est utilisé, le temps de point de contrôle du journal.

Cela nous devons regarder ce que refaire fichier journal stocké à la fin il est.

Afin d'éviter tout cercle ignorant, ne va pas à un format de magasin une perceuse fine (force que je ne l'ai pas, ha ha). Nous avons seulement besoin de savoir à peu près comment il a été conçu sur la ligne. De cette façon, nous à l'avenir si une scène similaire de leurs propres produits de conception, nous pouvons apprendre de sa conception il.

Eh bien, pour commencer:

 Dans le moteur de stockage InnoDB, afin de fichiers de journalisation sont stockées en unités de 512 octets, ce qui signifie que la mémoire tampon de journalisation, redo blocs de fichiers de journal sont des blocs (blocs) stockés de la manière visée à refaire bloc log (redo log block). Taille de bloc de 512 octets chacun. Étant donné que la taille du bloc de journalisation et la taille du secteur du disque, sont de 512 octets, et écrit donc le journal redo peut garantir atomicité, aucune technique de double écriture.

Chaque bloc de contenu rapide redo l'enregistrement du journal, sauf lui-même, mais aussi par l'en-tête du journal (en-tête de bloc de journal) et la queue de blocs de log (journal de bloc cybermarchand) composé de deux parties. Refaire la tête du journal occupe un total de 12 octets, 8 octets occupés à la fin du journal redo. Ces deux parties sont fixées. Par conséquent, la taille de chaque bloc peut refaire réellement stocker journal 492 octets (512-12-8), comme indiqué ci-dessous redo structure tampon de bloc de journal:

Marqué pas trop préoccupé par la signification de ces champs dans les chiffres, parce qu'ils n'ont pas beaucoup d'impact sur la compréhension des mécanismes pour mettre en uvre la transaction Redo journal, mais si ces préoccupations, les gens de voir ces variables se sentent majuscules vertigineuses.

ps: Ces variables sont des variables maintiennent un état de bloc de journal. Par exemple, le bloc journal représente l'utilisation actuelle, la position de départ actuelle du premier bloc de redo redo log et ainsi de suite. Pour donner un exemple:

Transaction T1 redo log 1 occupe 762 octets, T2 redo de transaction de journal occupe 100 octets. Étant donné que chaque bloc de journal peut réellement sauver 492 octets, ce qui dans le cas du tampon de journal devrait être comme suit:

Cette fonction est réalisée par la tête du bloc journal du champ à atteindre. Eh bien, ce n'est pas notre préoccupation, dire cela juste pour satisfaire la curiosité de tout le monde, ainsi que la compréhension initiale de ces variables.

Refaire bloc de journal sur le contenu de l'en-tête et cybermarchand est un journal redo spécifique. Correspondant aux différentes opérations refera le format de base de données de journal. De plus, étant donné que la gestion du stockage moteur de stockage InnoDB est basé sur la page, le format du journal redo est également basé sur la page. Bien que les journaux de restauration ont des formats différents, mais ils ont un format d'en-tête commun, comme le montre:

Format de tête universelle se compose d'environ 3 parties

  redo_log_type:  Refaire type de journal

  espace: Tableau espace ID

  page_no  Position décalée de la page, à savoir la page

Au bout d'un corps de journalisation, en fonction du type de fichiers de journalisation, ont des teneurs différentes en mémoire, par exemple pour l'insertion et la suppression d'enregistrements sur la page, correspondant respectivement à la forme de la figure (encore une fois, non pas d'un fil fin de chaque champ ce qui signifie, ce n'est pas l'objet de notre portée):

refaire structure de log sensiblement presentation.thank. En parlant avant la récupération du fichier journal redo, mais a également dit que le concept d'un LSN, LSN est une abréviation journal de numéro de séquence, qui représente le numéro de séquence du journal, le moteur de stockage InnoDB, LSN 8 octets, et en augmentant de façon monotone.

LSN représente le montant total de la transaction est écrit octets de journalisation. Les LSN courants 1000 fichiers de journalisation, il y a une journalisation de transactions d'écriture de 100 octets T1, il devient LSN 1100, si une autre transaction T2 écriture de journalisation 200 octets, alors il LSN il devient 1300.

LSN non seulement enregistré dans le journal redo, mais aussi l'existence de chaque page, à la tête de chaque page, il y a une FIL_PAGE_LSN de valeur, record page LSN, dans la page, LSN LSN représente la dernière fois la page rafraîchie taille . Parce que le journal redo est un journal de chaque page, de sorte que la page peut déterminer si la nécessité LSN page pour les opérations de récupération. Par exemple, la page P1 de LSN 10000, alors que la base de données est démarré, InnoDB détecte un redo d'écriture journal LSN 13000, et la transaction a été soumise, la base de données doit être une opération de récupération. Redo logs à la page P1, la même chose pour la page du journal redo LSN LSN est inférieure à P1, ne doivent pas être refait à neuf, parce que la LSN de la page P1 représente la position doit être rafraîchi, avant cette position le contenu a été traité avec succès.

Ensuite, il y a les opérations de récupération:

 moteur de stockage InnoDB pour fonctionner indépendamment du fait que les données du dernier arrêt correctement lorsque vous démarrez, va essayer de reprendre l'opération car l'enregistrement du journal redo est le journal physique (pas emmêlés), et donc la vitesse de récupération que les journaux logiques, tels que le journal binaire beaucoup plus rapide plus en même temps, le moteur de stockage InnoDB elle-même pour restaurer un certain degré d'optimisation, tel que lu séquentiellement et appliqué dans les journaux de rétablissement parallèles, ce qui améliore encore la vitesse de récupération de la base de données

Depuis le poste de contrôle dit qu'il a écrites sur le disque LSN sur la page, de sorte que le processus de récupération est une partie seulement du point de contrôle de journal de reprise a commencé. Par exemple, dans les dessins, lorsque la base de données se produit jusqu'à 000 en 10 LSN CHECKPOINT opération de restauration pour restaurer la plage de seulement un journal de LSN 10000 ~ 13000.

journal physique

 Par exemple, pour l'opération d'insertion, l'enregistrement du journal de changement physique de chaque page est:

 Si vous exécutez les instructions SQL:

 INSERT INTO SELECT t 1,2;

 Refaire enregistrement du journal est à peu près semblable à ceci:

 Page (2,3), le décalage 32, la valeur 1,2

Deux, Annuler journal

La deuxième partie est le journal d'annulation, il est possible de réaliser deux Caractéristiques:

 1. Pour annulation de la transaction

 2. La réalisation MVCC

redo enregistrements du journal et journal undo est pas le même journal physique, il est logique journal. Peut être pris en compte lors d'un enregistrement supprimer, annuler les enregistrements du journal dans un enregistrement correspondant à l'insert, et vice versa, lorsqu'un enregistrement de mise à jour, qui enregistre une mise à jour des enregistrements correspondant à l'opposé.

Lorsque vous effectuez une restauration, il peut être lu à partir de l'enregistrement du journal de undo logique au contenu approprié et rollback. Parfois, quand il est appliqué à la ligne versioning, et il est réalisé par le journal undo: Quand une ligne est verrouillée en lecture par une autre transaction, il peut analyser ce que la banque enregistre les données précédentes du journal undo, fournissant la informations sur la version en ligne pour aider les utilisateurs à atteindre lu cohérentes non bloquante. Nous donnons un exemple concret. Des exemples de cet article.

Cet exemple illustre les principales mises à jour de transaction pour traiter une ligne de l'enregistrement:

Avant la présentation, ajouter:

 InnoDB pour tous les trois lignes ont atteint un champ masqué utilisé pour mettre en uvre MVCC:

  • 6 octets ID de transaction (DB_TRX_ID, chaque traitement d'une transaction, de façon automatique la valeur 1.
  • 7 pointeur d'octet rollback (DB_ROLL_PTR), segment d'annulation du point écrit (rollback) d'un enregistrement de journal annuler.
  • ID caché

1. rangée de données initiale

F1 ~ F6 est un nom des rangs 1 à 6 sont les données correspondantes. Les champs sont cachés derrière les trois et le nombre de transactions à révulsés pointeur de ligne, si ce n'est que les données INSERT peuvent être considérés comme l'ID 1, les deux autres champs sont vides.

2. Transaction 1 modifie la valeur de chaque champ de la ligne

Lorsqu'une transaction pour modifier la valeur de la ligne, nous allons procéder comme suit:

  • Avec les verrous exclusifs de ligne
  • Refaire enregistrement du journal
  • La valeur de la ligne avant la modification copie (peut être comprise comme copie, ne pas emmêler ici que la réplication inversée mises à jour ont dit plus haut, le principe est le même) pour annuler journal, à savoir en dessous de la figure ci-dessus la ligne
  • Modification de la valeur actuelle de la ligne, remplir un numéro de transaction, le pointeur de rollback à la ligne avant que le journal d'annulation des modifications.

3. Modifier la valeur transactionnelle de la rangée 2

1 et la même transaction, undo journal, il y a deux lignes, et reliées entre elles par roulement pointeur arrière.

Ces pointeur de liaison par laminage rangée arrière est équivalente à plus de clichés de données, afin d'assurer la cohérence MVCC lecture sans verrouillage.

Des règles spécifiques sont les suivantes:

InnoDB est MVCC, est réalisée au moyen d'au dessus de chaque rangée derrière le dossier caché colonne que nous disons. Ils font gagner du temps et l'heure d'expiration pour créer des lignes de lignes (ou temps de suppression), bien sûr, ne sont pas stocker la valeur temps réel, mais le numéro de version du système. Chaque démarrage d'une nouvelle transaction, le système incrémente automatiquement le numéro de version. le numéro de version du système sera l'heure de début de la transaction comme le numéro de version de la transaction et le numéro de version à chaque ligne de la requête à l'enregistrement à titre de comparaison. Dans le niveau d'isolement REPEATABLE READ, opération spécifique MVCC est la suivante:

SELECT

 InnoDB vérifie chaque ligne d'enregistrements dans les deux conditions suivantes:

  • InnoDB ne trouve que la version antérieure à la version actuelle de transaction de la ligne, qui est, le numéro de version du système du numéro de version du système de ligne inférieure ou transactions égales, veiller à ce que la ligne lit les affaires, que ce soit avant le début de la transaction existe déjà, que ce soit insert de transaction elle-même ou de modification.
  • version supprimée de la ligne, soit non définie ou supérieur au numéro de version de la transaction en cours. Cela garantit que la transaction lecture d'une ligne, n'a pas été supprimée avant que la transaction commence.
  •  Seuls les enregistrements répondent aux conditions ci-dessus deux, pour revenir à la suite de la requête.

INSERT

  • InnoDB est insérée dans chaque rangée pour enregistrer le numéro de version du système que la version de ligne.

SUPPRIMER

  • InnoDB enregistrer le numéro de version du système pour chaque ligne sous forme de lignes supprimées supprimé identité.

Mise à jour

  • InnoDB pour insérer une nouvelle ligne disque, enregistrer le numéro de version du système que le numéro de version de la ligne, en même temps, enregistrez le numéro de version du système pour supprimer la ligne d'origine comme l'identifiant de ligne.

Lisez ici, il peut y avoir une question, pensez à la séquence d'exécution suivante:

011.png

Sélectionnez selon les règles précédentes, la session de la transaction B est à l'arrière de la session A, B est supérieur au numéro de version de la transaction transaction A est le numéro de version. Une sorte insérée dans les données en cas de non engagée, B peut lire une version modifiée des données, qu'il ne contredit pas?

En fait, non, InnoDB est déterminé par la vue lecture une consistance de cliché instantané de base de données lors de la lecture, InnoDB est vue en lecture pour déterminer si un enregistrement à voir, il y a deux règles:

 1 ne peut pas voir la vue de lecture créé début plus tardif moment de la transaction

 2 voir actif lors de la création de la transaction ne peut pas lire vue

Pour la séance A, début et n'a pas créé une vue en lecture lors de la transaction, mais a été créé dans la déclaration de mise à jour. Donc, vue en lecture session Un temps de création que la fin de la session B. Donc, B ne verra pas le fonctionnement du A. Empêchant ainsi la lecture non reproductible.

deux règles originales décrites ci-dessous:

  Règle 1:  Lorsque l'objet de vue en lecture est créé, il note en bas le plus petit identificateur de transaction non encore utilisée comme identifiant de transaction (trx_sys_t :: max_trx_id). Le point de vue de lecture appelle la limite basse. Ainsi, la transaction en utilisant la vue de lecture ne doit pas voir tout transaction avec identificateur supérieure ou égale à cette limite inférieure.

Règle 2:  La transaction en utilisant la vue de lecture ne doit pas voir une transaction qui était active lorsque la vue en lecture a été créé.

REMARQUE: Si vous n'êtes pas undo journal a été supprimé, il roulera de nouveau faire marche arrière par le pointeur d'enregistrement courant du contenu original lors de la création de la ligne, il y a un fils de purge Heureusement, dans le InnoDB, il interroge la plus ancienne de ceux qu'il est maintenant aussi les transactions actives début undo journal, et les supprimer, assurant ainsi undo fichier journal ne sera pas croître indéfiniment.

Auteur: chercher petit Nord

Lien: https: //www.jianshu.com/p/9b83ea78b380

« En voyant les gens chien » de ce groupe de peintures, secret chien fuite sept personnes ...
Précédent
les rumeurs de transfert SKT continuent, une fois que ses coéquipiers vont revenir à SKT aide Faker gagner?
Prochain
Pouvez-vous me attraper perdre le compte! Bracelet Millet 3 Détails d'exposition de la page: prix 169 yuans
Ces cinq écoles ont été méprisés à cause du nom, une force extraordinaire
Ne collez pas la fenêtre « go-secrétaire » du! Mais ce sera bien
Trois Rendus caméra à domicile libérés après l'iPhone 11 / cogne encore plus petit!
Apprenez les rudiments de Nginx
OPPO le cur à pleurer! Huawei frottent à la chaleur: Nous sommes « daisy-humaine »
JKL le plus recherché le titre ou sa peau! président en direct et double champion a révélé des messages de la peau
Blanc INCONTOURNABLES: Neural Network Mise en route Guide
Hu Mei nouveau travail « dans la capitale » fichier donné Mai Li 10 mai Fu Dalong saisissants débuts
Matin Lecture | multinationale Boeing 737MAX8 doivent faire une pause d'appel
En venant diable en direct! Le feu a éclaté par le joueur MVP, de la bouche Hey Theshy?
INVAINCUS x NIKE joint cache aussi un seul produit! En plus d'acheter Air Max 97 nécessitent une attention particulière!