Accélérez votre site Web avec la mise en cache de requêtes MySQL
L'un des meilleurs moyens d'accélérer votre application Web consiste à activer la mise en cache des requêtes dans votre base de données, laquelle met en cache les requêtes SQL couramment utilisées en mémoire pour un accès quasi instantané à la page suivante qui effectue la même demande..
Si cette méthode est si puissante, c'est que vous n'avez pas à modifier votre application Web, vous devez simplement sacrifier un peu de mémoire. Cela ne réglera pas tous vos problèmes, mais cela ne peut certainement pas nuire.
Remarque: si votre application met fréquemment à jour les tables, le cache de requêtes sera constamment purgé et vous n'en tirerez aucun avantage. C'est idéal pour une application qui lit principalement dans la base de données, telle qu'un blog WordPress. Cela ne fonctionnera pas non plus si vous utilisez un hébergement partagé..
Activer la mise en cache avec le serveur en cours d'exécution
La première chose à faire est de vous assurer que votre installation de MySQL dispose de la prise en charge de la mise en cache des requêtes. La plupart des distributions le font, mais vous devriez quand même vérifier.
Vous voudrez exécuter cette commande depuis votre console MySQL, qui vous indiquera si la mise en cache des requêtes est disponible..
mysql> affiche des variables comme 'have_query_cache'; + ------------------ + ------- + | Nom_variable | La valeur | + ------------------ + ------- + | have_query_cache | OUI +------------------+-------+
Ne confondez pas ceci avec le sens que la mise en cache des requêtes est réellement activée, car la plupart des fournisseurs d'hébergement ne l'activeront pas par défaut. Curieusement, mon installation Ubuntu Feisty l’avait déjà activée…
Ensuite, nous devrons vérifier si la mise en cache des requêtes est activée. Nous aurons besoin de vérifier plusieurs variables, nous pourrons donc aussi tout faire en même temps en vérifiant la variable requête%
mysql> affiche des variables telles que 'query%'; + ------------------------------ + --------- + | Nom_variable | La valeur | + ------------------------------ + --------- + | query_alloc_block_size | 8192 | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 8388608 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | | query_prealloc_size | 8192 | +------------------------------+---------+
Voici les éléments importants de la liste et leur signification:
- query_cache_size - C'est la taille du cache en octets. Définir cette valeur sur 0 désactivera effectivement la mise en cache.
- query_cache_type - Cette valeur doit être ON ou 1 pour que la mise en cache des requêtes soit activée par défaut.
- query_cache_limit - C'est la requête de taille maximale (en octets) qui sera mise en cache.
Si la valeur query_cache_size est définie sur 0 ou si vous souhaitez simplement la modifier, vous devez exécuter la commande suivante, en gardant à l'esprit que la valeur est en octets. Par exemple, si vous souhaitez allouer 8 Mo au cache, utilisez 1024 * 1024 * 8 = 8388608 comme valeur..
SET GLOBAL query_cache_size = 8388608;
De même, les autres options peuvent être définies avec la même syntaxe:
SET GLOBAL query_cache_limit = 1048576;SET GLOBALquery_cache_type
= 1;
Maintenant, comment pouvons-nous savoir si cela fonctionne réellement? Vous pouvez utiliser la commande SHOW STATUS pour extraire toutes les variables commençant par «Qc» pour jeter un coup d'œil à ce qui se passe sous le capot..
mysql> SHOW STATUS LIKE 'Qc%'; + ------------------------- + -------- + | Nom_variable | La valeur | + ------------------------- + -------- + | Qcache_free_blocks | 65 | | Qcache_free_memory | 201440 | | Qcache_hits | 18868 | | Qcache_inserts | 2940 | | Qcache_lowmem_prunes | 665 | | Qcache_not_cached | 246 | | Qcache_queries_in_cache | 492 | | Qcache_total_blocks | 1430 | + ------------------------- + -------- + 8 lignes dans le jeu (0.00 sec)
Vous remarquerez dans les statistiques qu'il me reste beaucoup de mémoire libre. Si votre serveur affiche beaucoup de pruneaux lowmem, vous devrez peut-être augmenter cette valeur, mais je ne dépenserais pas trop de mémoire pour la mise en cache des requêtes pour un serveur Web… vous devez laisser de la mémoire disponible pour apache, php, ruby ou tout ce que vous utilisez.
Activer dans un fichier de configuration
Si vous voulez que ces modifications survivent au redémarrage ou au redémarrage du serveur mysql, vous devez les ajouter à votre fichier de configuration /etc/mysql/my.cnf pour MySQL. Notez qu'il peut être dans un emplacement différent sur votre installation.
Ouvrez le fichier à l'aide d'un éditeur de texte en mode sudo ou root, puis ajoutez ces valeurs si elles n'existent pas déjà dans le fichier. Si elles existent, il suffit de les supprimer.
query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576
La mise en cache des requêtes peut considérablement améliorer la vitesse de votre application Web, en particulier si votre application lit principalement. Surveillez l'état à l'aide des méthodes ci-dessus et voyez comment cela fonctionne dans le temps..