Les fichiers de données que vous définissez dans le fichier de
configuration forment l'espace de données
InnoDB
. Les fichiers sont simplement
concaténés pour former un espace de données, et il n'y a pas
de parallélisme utilisé. Actuellement, vous ne pouvez pas
spécifier où l'espace est alloué pour vos tables, hormis en
utilisant la méthode suivante : pour chaque nouvel espace de
données créé, InnoDB
va allouer de
l'espace en partant depuis la fin.
L'espace de tables est constitué de pages de taille 16 ko. Les
pages sont groupées en ensembles de 64 pages consécutives. Les
'fichiers' dans un espace de tables sont appelés des segments
en InnoDB
. Le nom du segment d'annulation est
un peu trompeur, car il contient en fait de nombreux segments
dans l'espace de table.
Pour chaque index de InnoDB
, nous allons
créer deux segments : un pour les noeuds non terminaux du B
tree, et un autre pour les noeuds terminaux. L'idée ici est
d'améliorer la séquence des noeuds terminaux, qui contiennent
les données.
Lorsqu'un segment croit dans un espace de table,
InnoDB
alloue les 32 premières pages
spécifiquement pour un segment. Après cela,
InnoDB
commence à allouer des extensions au
segment. InnoDB
peut ajouter aux grands
segments jusqu'à 4 extension en même temps, pour améliorer la
séquence de données.
Certaines pages dans l'espace de table contiennent des cartes
des autres pages, et donc, quelques extensions dans un espace de
table InnoDB
ne pourront pas être allouées
en tant que segment, mais comme pages individuelles.
Lorsque vous exécutez une commande SHOW TABLE STATUS
FROM ... LIKE ...
pour demander quel est l'espace
libre dans la table, InnoDB
va rapporter les
extensions qui sont encore totalement libre.
InnoDB
se réserve toujours quelques
extensions pour la gestion interne. Ces extensions réservées
ne sont pas inclues dans l'espace libre.
Lorsque vous effacez des donnes d'une table,
InnoDB
va contracter les index
B-tree
correspondants. Suivant les
effacements qui vont libérer des pages individuelles ou des
extensions, de l'espace sera rendu aux autres tables. Effacer
une table ou en effacer toutes les lignes va rendre
obligatoirement de l'espace aux autres tables, mais souvenez
vous que les lignes effacées ne pourront être physiquement
effacée qu'après une opération de purge, si aucune
transaction n'en a plus besoin.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.