[+/-]
Pour réduire les accès aux disques, le moteur
MyISAM
emploie une stratégie utilisé par de
nombreux systèmes de bases de données. Il utilise un cache qui
garde en mémoire les blocs de tables les plus souvent
utilisés.
Pour les blocs d'index, une structure spéciale appelée cache de clés (buffer de clés) est entretenue. La structure contient un certain nombre de bloc de mémoire, où les blocs d'index les plus souvent sollicités résident.
Pour les blocs de données, MySQL n'utilise pas de cache. Au lieu de cela, il exploite le cache natif du système de fichiers.
Cette section décrit les opérations basiques du cache de clés
MyISAM
. Puis, elle présente les
modifications apportées en MySQL version 4.1 pour améliorer
les performances du cache de clés, et vous donner un meilleur
contrôle sur les opérations de cache.
Les accès aux caches de clés ne sont pas séquentiels entre les threads. Des accès simultanés sont désormais possibles.
Vous pouvez configurer plusieurs caches de clés, et assigner différents index de tables, spécifiquement.
Le mécanisme de cache de clés est aussi utilisé par les
tables ISAM
. Toutefois, ce n'est pas
significatif. Les tables ISAM
sont de moins
en moins utilisée depuis l'introduction en MySQL 3.23 des
tables MyISAM
. MySQL 4.1 va plus loin : les
tables ISAM
sont désactivées par défaut.
Vous pouvez contrôler la taille du cache de clé avec la
variable système key_buffer_size
. Si cette
variable vaut zéro, le cache ne sera pas utilisé. Le cache de
clés est aussi désactivé si la valeur de
key_buffer_size
est trop petite pour allouer
le nombre minimal de blocs de buffers (8).
Lorsque le cache de clés n'est pas opérationnel, les fichiers d'index sont lus avec le cache du système de fichiers, fourni par le système d'exploitation. En d'autres termes, les index sont lus avec la même technique que les blocs de données.
Un bloc d'index est une adresse unitaire pour le fichier d'index
MyISAM
. Généralement, la taille d'un bloc
d'index est égal à la taille des noeuds de l'index
B-tree
. Les index sont représentés sur le
disque en utilisant un arbre B-tree
. Les
noeuds terminaux sont appelés des feuilles. Les noeuds qui ne
sont pas des feuilles sont dits non-terminaux.
Tous les blocs de buffer dans la structure de cache de clés ont la même taille. Cette taille peut être égale, supérieure ou inférieure à la taille de bloc d'index de la table. Généralement, un de ces deux valeurs est un multiple de l'autre.
Lorsque des données d'un bloc d'index de table doivent être lues, le serveur commence par vérifier si elles sont disponibles dans le cache de clés, plutôt que sur le disque. C'est à dire, qu'il va préférer écrire ou lire dans le cache de clés que sur le disque. Sinon, le serveur choisit un bloc de cache contenant un index d'une autre table, et remplace les données par celles de la table qu'il manipule. Dès que le bloc est dans le cache, les données d'index sont accessibles.
Si un des blocs sélectionnés pour être écrasé, a été modifié, le bloc est considéré comme ``sale.'' Dans ce cas, avant d'être remplacé, il est d'abord écrit dans le fichier d'index, sur le disque.
Généralement, le serveur suit une heuristique
LRU
(Least Recently
Used
: le moins utilisé) : lorsqu'il choisit un
bloc pour être remplacé, il sélectionne le bloc qui a été
accédé le moins souvent. Pour faciliter ce choix, le module de
cache de clés entretient une queue (la chaîne LRU) de tous les
blocs utilisés. Lorsqu'un bloc doit être remplacé, les blocs
du début de la queue sont les moins souvent sélectionnés, et
sont les candidats au remplacement.
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.