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 Section 9.4.1, « 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.
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.