La variable système serveur have_query_cache
indique si le cache est actif :
mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
Le cache de requête ajoute plusieurs variables système MySQL
liées à mysqld
qui peuvent être
spécifiées dans un fichier de configuration, en ligne de
commande lors du démarrage de mysqld
. Les
variables systèmes liées au cache sont toutes préfixées avec
query_cache_
. Elles sont décrites
brièvement dans la section
Section 5.2.3, « Variables serveur système », avec des informations
complémentaires.
Pour configurer la taille du cache de requêtes, modifiez la
variable système query_cache_size
. En lui
donnant la valeur de 0, vous le désactivez. La taille par
défaut du cache est de 0 : le cache est désactivé par
défaut.
Si le cache de requête est actif, la variable
query_cache_type
modifie son comportement.
Cette variable peut prendre les valeurs suivantes :
La valeur de 0
ou OFF
empêche la mise en cache ou la lecture de résultats en
cache.
La valeur de 1
ou ON
permet le cache, sauf pour les commandes qui commencent par
SELECT SQL_NO_CACHE
.
La valeur de 2
ou
DEMAND
impose la mise en cache de toutes
les requêtes, même celles qui commencent par
SELECT SQL_CACHE
.
Modifier la valeur GLOBAL
de
query_cache_type
détermine le comportement
du cache pour tous les clients qui se connecteront après la
modification. Les clients individuels peuvent modifier le
comportement du cache pour leur connexion avec l'option
SESSION
de
query_cache_type
. Par exemple, un client peut
désactiver le cache de requête pour ses propres requêtes
avec :
mysql> SET SESSION query_cache_type = OFF;
Pour contrôler la taille maximale des résultats de requêtes
qui peuvent être mis en cache, il faut modifier la valeur de la
variable query_cache_limit
. La valeur par
défaut de 1Mo.
Le résultat d'une requête (les données envoyées au client)
sont stockées dans le cache durant la lecture. Par conséquent,
les données ne sont pas manipulées en un seul gros morceau. Le
cache de requête alloue des blocs à la demande, pour stocker
les données, et dès qu'un bloc est rempli, un autre est
alloué. Comme l'allocation de mémoire est une opération
coûteuse (en temps), le cache de requêtes crée des blocs avec
une taille minimale de
query_cache_min_res_unit
, jusqu'à la taille
des données à mettre en cache. Suivant le type de requêtes
exécutées, vous pourrez adapter la valeur de la variable
query_cache_min_res_unit
:
La valeur par défaut de
query_cache_min_res_unit
est 4Ko. Cela
doit être adapté la plupart des situations.
Si vous avez beaucoup de requêtes avec de petits
résultats, la taille par défaut sera un peu grande, et
conduit à une fragmentation inutile de la mémoire,
indiquée par un grand nombre de blocs libres. La
fragmentation va forcer le cache à effacer d'anciennes
requêtes pour libérer de la place. Dans ce cas, réduisez
la valeur de query_cache_min_res_unit
. Le
nombre de blocs libres et de requêtes supprimées pour
libérer de la place sont stockées dans les variables
Qcache_free_blocks
et
Qcache_lowmem_prunes
.
Si la plupart de vos requêtes ont de grands résultats
(vérifiez les variables
Qcache_total_blocks
et
Qcache_queries_in_cache
), vous pouvez
augmenter la valeur de
query_cache_min_res_unit
. Cependant,
soyez prudent de ne pas aggrandir trop la valeur (voir point
précédent).
query_cache_min_res_unit
a été ajoutée en
MySQL 4.1.
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.