7.4.6 Le cache de clé des tables MyISAM
7.4 Optimiser la structure de la base de données
7 Optimisation de MySQL
Manuel de Référence MySQL 4.1 : Version Française
. Accès au cache de clé partagé ->Caches multiples de clés . Stratégie d'insertion au milieu . Pré-chargement des index . Taille des blocs du cache de clé . Restructurer le cache de clé
|
7.4.6.2 Caches multiples de clés
Les accès partagés à un cache de clés améliorent grandement les performances,
mais ne règlent pas les contentieux entre les threads. Ils sont toujours en
compétition pour les structures de contrôle qui donnent l'accès aux caches de
clés. Pour réduire ces frictions, MySQL 4.1.1 dispose de caches multiples de clés.
Cela vous permet d'assigner différentes clés à différents caches.
Lorsqu'il peut y avoir un cache de clé multiple, le serveur doit savoir quel
cache utiliser lors du traitement d'une requête, pour une table
MyISAM
.
Par défaut, les index des tables
MyISAM
dans le cache par défaut.
Pour assigner un index à un cache spécifique, utilisez la commande
CACHE INDEX
.
Par exemple, les deux commandes suivantes assignent les index des tables
t1
,
t2
et
t3
au cache de clé appelé
hot_cache
:
mysql> CACHE INDEX t1, t2, t3 IN hot_cache; +---------+--------------------+----------+----------+ | Table | Op | Msg_type | Msg_text | +---------+--------------------+----------+----------+ | test.t1 | assign_to_keycache | status | OK | | test.t2 | assign_to_keycache | status | OK | | test.t3 | assign_to_keycache | status | OK | +---------+--------------------+----------+----------+
|
Note :
si le serveur a été compilé en incluant le moteur de table
ISAM
, les tables
ISAM
utilise le mécanisme de cache de clés. Mais
les index
ISAM
utilisent uniquement le cache de clés par défaut, et ils
ne peuvent pas être assignés à un autre cache.
Le cache de clés indiqué dans la commande
CACHE INDEX
peut être
créé en spécifiant sa taille avec le paramètre
SET GLOBAL
ou en utilisant
les options de démarrage. Par exemple :
mysql> SET GLOBAL keycache1.key_buffer_size=128*1024;
|
Pour détruire un cache de clé, donnez lui une taille de zéro :
mysql> SET GLOBAL keycache1.key_buffer_size=0;
|
Les variables de cache de clés sont des variables systèmes structurées, qui
ont un nom et des composants. Pour
keycache1.key_buffer_size
,
keycache1
est le nom de variable du cache, et
key_buffer_size
est le composant de cache. Voyez Variables système structurées pour une
description de la syntaxe utilisée pour faire référence aux variables système
structurée.Par défaut, les index de tables sont assignés dans le cache de clé principal,
dit aussi cache par défaut. Ce cache est créé au démarrage. Lorsqu'un cache
de clés est détruit, les index qui lui étaient assignés sont assignés au
cache par défaut.
Pour un serveur en charge, nous recommandons la stratégie suivante pour
les caches de clés :
-
Un cache de clés principal qui représente 20% de l'espace alloué pour tous les
caches de clés. Il sera utilisé par les tables qui sont le plus sollicitées,
mais qui ne sont pas modifiées.
-
Un cache de clés minoritaire qui représente 20% de l'espace alloué pour tous
les caches de clés. Il sera utilisé pour les tables de taille intermédiaires,
qui sont intensivement modifiées, comme des tables temporaires, par exemple.
-
Un cache de clés secondaire qui représente 60% de l'espace alloué pour tous
les caches de clés. C'est le cache de clé par défaut, il sera utilisé pour toutes
les autres tables.
Une raison pour utiliser les trois caches de clés est que l'accès à un
des caches ne bloque pas l'accès aux autres. Les requêtes qui
accèdent aux index d'un des caches ne sont pas en compétition avec les
requêtes qui utilisent les index dans les autres cache. Les gains de
performances sont aussi dûs à :
-
Le cache principal est utilisé pour les requêtes en lecture et son contenu
est jamais modifié. Par conséquent, lorsqu'un bloc d'index doit être lu sur
le disque, le contenu du bloc remplacé n'a pas besoin d'être sauvé.
-
Pour un index assigné au cache principal, s'il n'y a pas de requêtes qui font
des scans d'index, il y a une haute probabilité que tous les blocs d'index
qui ne sont pas terminaux resteront dans le cache.
-
Une opération de modification sur une table temporaire est effectuée plus
rapidement lorsque le noeud à modifier est déjà dans le cache, et n'a pas
besoin d'être lu dans le disque. Si la taille des index de la table temporaire
est comparable à la taille du cache minoritaire, la probabilité est très haute
que l'index soit déjà dans le cache.
|