Accès au cache de clé partagé
<<<
Caches multiples de clés Stratégie d'insertion au milieu
>>>

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.

<< Caches multiples de clés >>
Accès au cache de clé partagé Le cache de clé des tables MyISAM Stratégie d'insertion au milieu