[Notes d'étude MySQL (5)] Détail de la structure de la page d'index InnoDB

Cet article est publié par le compte officiel [Developing Pigeon]! Bienvenue à suivre! ! !


Old Rules-Sister Town House:

Une. Page d'index InnoDB

(I. Aperçu

       Les pages sont l'unité de base pour InnoDB pour gérer l'espace de stockage. InnoDB a conçu différents types de pages à des fins différentes. Ce qui suit décrit les pages qui stockent les enregistrements dans la table, qui sont appelées pages d'index.

(2) Structure de la page d'index

       La page d'index peut être divisée en plusieurs parties. Le nombre d'octets occupés par certaines parties est déterminé et le nombre d'octets occupés par certaines parties est incertain.

1. En-tête de fichier

       En-tête de fichier, 38 octets, quelques informations générales de la page.

2. En-tête de page

       En-tête de page, 56 octets, informations spécifiques pour la page d'index.

3. Suprême + le plus bas

       Le plus petit enregistrement et le plus grand enregistrement de la page, 26 octets.

4. Enregistrements d'utilisateurs

       Enregistrement utilisateur, nombre d'octets incertain, contenu d'enregistrement stocké par l'utilisateur.

5. Espace libre

       Espace libre, nombre d'octets incertain, espace inutilisé dans la page.

6. Répertoire des pages

       Répertoire de la page, pas sûr du nombre d'octets, de la position relative de certains enregistrements dans la page.

7. Bande-annonce de fichier

       La fin du fichier, 8 octets, vérifie si la page est complète.


(3) Conservation des enregistrements

1. Enregistrements d'utilisateurs

       Les enregistrements que vous avez stockés seront stockés dans la section Enregistrements utilisateur selon le format de ligne spécifié. Lorsque la page est générée au début, il n'y a pas de section Enregistrements utilisateur. Chaque fois qu'un enregistrement est inséré, il s'applique à un espace de taille d'enregistrement à partir de la section Espace libre. Section Enregistrements utilisateur.

2. Enregistrer les informations d'en-tête

       Nous avons introduit les informations d'en-tête supplémentaires dans l'enregistrement auparavant, mais ne les avons pas présentées en détail, parlons-en en détail ci-dessous.

(1) drapeau_supprimé

       Cet attribut est utilisé pour indiquer si l'enregistrement en cours est supprimé. Il occupe 1 bit. Lorsque la valeur est 1, l'enregistrement est supprimé. En fait, les enregistrements existent toujours sur le disque, mais ils sont supprimés de manière logique. Tous les enregistrements supprimés formeront une liste chaînée de déchets. L'espace occupé par les enregistrements de cette liste liée est appelé espace réutilisable. Ensuite, si un nouvel enregistrement est insérés dans le tableau In, ces espaces d'enregistrement peuvent être écrasés.

(2) tas_no

       La position relative de l'enregistrement dans la page d'index dans le tas, le heap_no de l'enregistrement devant la page est relativement petit et le heap_no de l'enregistrement au dos de la page est relativement grand.

(3) Faux disques

       InnoDB ajoute automatiquement deux enregistrements à chaque page, appelés pseudo enregistrements, l'un représentant le plus petit enregistrement de la page (enregistrement Infimum) et l'autre représentant le plus grand enregistrement de la page (enregistrement Supremum). Les enregistrements peuvent également être comparés en taille.En comparant les clés primaires des enregistrements, InnoDB spécifie que tout enregistrement utilisateur est plus grand que l'enregistrement Infimum et plus petit que l'enregistrement Supremum. Ces deux enregistrements ne sont pas placés dans la section Enregistrements d'utilisateurs, mais sont placés séparément dans la section Infimum + Supremum.

(4) type_enregistrement

       Le type d'enregistrement actuel, il existe 4 types d'enregistrements, 0 signifie enregistrement normal, 1 signifie enregistrement d'entrée de répertoire du nœud non feuille d'arbre B +, 2 signifie enregistrement inférieur, 3 signifie enregistrement Supremum.

(5) suivant_record

       Cela signifie la distance entre les données réelles de l'enregistrement actuel et les données réelles de l'enregistrement suivant. S'il s'agit d'un nombre positif, cela signifie que l'enregistrement suivant est à l'arrière, sinon il est à l'avant. Cela indique que cette structure est une liste liée et que l'enregistrement suivant fait référence à l'enregistrement suivant trié par la valeur de clé primaire de petite à grande. Par conséquent, l'enregistrement suivant de l'enregistrement Infimum est l'enregistrement utilisateur avec la plus petite valeur de clé primaire sur cette page, et l'enregistrement suivant de l'enregistrement utilisateur avec la plus grande valeur de clé primaire du secteur est l'enregistrement Supremum.


(4) Liste des pages

       Maintenant que nous savons que les enregistrements de la page sont concaténés en une seule liste liée dans l'ordre de la valeur de clé primaire de petite à grande, comment trouver rapidement des enregistrements dans la page?

       Similaire à l'idée d'un annuaire, un annuaire de pages a été proposé. Divisez tous les enregistrements normaux (y compris les enregistrements Infimum et Supremum, à l'exclusion des enregistrements supprimés) en plusieurs groupes, et l'attribut n_own dans les informations d'en-tête du dernier enregistrement de chaque groupe (le plus grand du groupe) indique le nombre de groupes dans le groupe. Un enregistrement, extrayez le décalage d'adresse (la distance entre les données réelles et le 0e octet) de l'enregistrement dans la page, et stockez-les dans l'ordre vers la fin de la page. Il s'agit du répertoire de la page, ces adresses dans la page directory L'offset est appelé un slot et chaque slot occupe deux octets.

       Étant donné que les enregistrements sont triés en fonction de la valeur de clé primaire de la plus grande à la plus petite, vous pouvez utiliser la dichotomie pour rechercher, en effectuant une requête de dichotomie dans le répertoire de la page et en effectuant une requête par la valeur de la clé primaire pour trouver le groupe dans lequel se trouve l'enregistrement. , puis l'enregistrement principal du groupe Commencez la recherche dans le parcours suivant_enregistrement, et chaque enregistrement de regroupement peut avoir jusqu'à 8 enregistrements, le coût est donc très faible.

Alors, quelle est la base de la division en groupes?

       InnoDB stipule qu'il ne peut y avoir qu'un seul enregistrement pour le groupe où se trouve l'enregistrement Infimum. Le groupe où se trouve l'enregistrement Supremum a le nombre d'enregistrements compris entre 1 et 8 et les groupes restants sont compris entre 4 et 8. Dans la situation initiale, une page de données ne contient que des enregistrements Infimum et des enregistrements Supremum, qui appartiennent à deux groupes et à deux emplacements. Une fois que chaque enregistrement est inséré, la valeur de clé primaire de l'enregistrement correspondant sera trouvée dans le répertoire de la page que l'enregistrement vers être insérée. La valeur de clé primaire de est l'emplacement avec la plus grande différence et la plus petite différence, puis la valeur n_own de l'enregistrement correspondant à l'emplacement est +1, ce qui signifie qu'un autre enregistrement est ajouté au groupe jusqu'à la limite supérieure de 8 est atteint. Après cela, les enregistrements du groupe seront divisés en deux groupes et un nouvel emplacement sera ajouté.


(5) En-tête de page

       Les informations d'état enregistrées dans la page d'index occupent 56 octets fixes.

(6) En-tête de fichier

       Couramment utilisé pour divers types de pages, décrit certaines informations générales, telles que le numéro de page, la page précédente et la page suivante, ainsi que la somme de contrôle de la page en cours, qui est utilisée pour vérifier l'intégrité de la page, occupant un fixe 38 octets.

(7) La fin du fichier

       InnoDB actualisera continuellement la page dans le disque et la mémoire. Si les données de page modifiées sont interrompues de manière inattendue pendant le processus d'actualisation, comment déterminer si les données de page sont actualisées avec succès?

       Grâce à la somme de contrôle de l'en-tête de fichier et de la queue de fichier, la queue de fichier est composée de 8 octets. Les 4 premiers octets représentent la somme de contrôle de la page, qui correspond à la somme de contrôle de l'en-tête de fichier. Chaque fois qu'une page est en mémoire Quand une modification se produit, la somme de contrôle de la page doit être calculée avant l'actualisation. Étant donné que l'en-tête du fichier est devant la page, la somme de contrôle de l'en-tête du fichier sera d'abord actualisée sur le disque. Lorsque la page est entièrement écrite, la somme de contrôle sera corrigée. La somme de contrôle sera également écrite à la fin de la page. Si l'actualisation de la page réussit, les sommes de contrôle en haut et en bas de la page doivent être identiques. Si elle se termine de manière inattendue, les sommes de contrôle en haut et à la fin sont incohérent, indiquant qu'une erreur s'est produite lors de l'actualisation.

Je suppose que tu aimes

Origine blog.csdn.net/Mrwxxxx/article/details/113803809
conseillé
Classement