samedi 31 mars 2012

Accélérez votre site web avec mise en cache de requêtes MySQL

Une des meilleures façons d'accélérer votre application web est de permettre la mise en cache de requête dans votre base de données, qui met en cache des requêtes SQL couramment utilisées dans la mémoire pour un accès quasi instantané de la page suivante qui fait la même demande.

La raison de cette méthode est si puissant, c'est que vous n'avez pas à apporter des modifications à votre application web, il vous suffit de sacrifier un peu de mémoire. Cela ne va pas de résoudre tous vos problèmes, mais il ne peut certainement pas nuire.

Note: si votre application met à jour les tables fréquemment, alors le cache de requête sera constamment purgé et que vous n'obtiendrez pas beaucoup ou tout autre avantage de cette situation. Ceci est idéal pour une application qui ne lit plus souvent la base de données, comme un blog WordPress. Ce sera également ne pas fonctionner si vous utilisez sur l'hébergement mutualisé.

Activer le cache d'un serveur exécutant

La première chose que vous voulez faire est de s'assurer que votre installation de MySQL a effectivement utiliser pour soutenir la mise en cache de requêtes disponibles. La plupart des distributions faites, mais vous devriez vérifier de toute façon.

Vous aurez envie de lancer cette commande à partir de votre console de MySQL, qui vous indiquera si la mise en cache de requête est disponible.

mysql> show variables like 'have_query_cache'; +------------------+-------+ | Variable_name    | Value | +------------------+-------+ | have_query_cache | YES   | +------------------+-------+ 

Ne confondez pas cela comme signifiant que la mise en cache de requête est effectivement permis, parce que la plupart des fournisseurs d'hébergement ne vont pas permettre à ce par défaut. Curieusement, mon Ubuntu Feisty installation déjà avait permis ...

Ensuite, nous aurons besoin de vérifier et de voir si la mise en cache de requête est activé. Nous allons avoir besoin de vérifier plus d'une variable, alors nous pouvons aussi bien le faire tout à la fois en vérifiant la variable de requête%

mysql> show variables like 'query%'; +------------------------------+---------+ | Variable_name                | Value   | +------------------------------+---------+ | 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 points importants dans la liste et ce qu'ils signifient:

  • query_cache_size - C'est la taille du cache en octets. La définition de cette valeur à 0 sera effectivement désactiver le cache.
  • query_cache_type - Cette valeur doit être ON ou 1 pour la recherche de cache d'être activé par défaut.
  • query_cache_limit - Ceci est la requête la taille maximale (en octets) qui sera mis en cache.

Si la valeur query_cache_size est mis à 0 ou vous voulez juste de le changer, vous devrez exécuter la commande suivante, en gardant à l'esprit que la valeur est en octets. Par exemple, si vous voulez allouer à la mémoire cache 8Mo nous utiliserions 1024 * 1024 * 8 = 8388608 comme valeur.

SET GLOBAL query_cache_size = 8388608;

De même, les autres options peuvent être réglées avec la même syntaxe:

SET GLOBAL query_cache_limit = 1048576;
SET GLOBAL query_cache_type = 1;

Maintenant, comment pouvons-nous dire si ça fonctionne réellement? Vous pouvez utiliser la commande SHOW STATUS pour tirer toutes les variables qui commencent par "QC" jeter un oeil à ce qui se passe sous le capot.

mysql> SHOW STATUS LIKE 'Qc%'; +-------------------------+--------+ | Variable_name           | Value  | +-------------------------+--------+ | 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 rows in set (0.00 sec) 

Vous remarquerez dans les stats que j'ai laissé beaucoup de mémoire libre. Si votre serveur montre beaucoup de pruneaux lowmem, vous pourriez avoir besoin d'envisager d'augmenter cette valeur, mais je ne dépenserais pas trop de mémoire sur le cache de requête pour un serveur web ... vous avez besoin de quitter la mémoire disponible pour Apache, PHP, Ruby, ou ce que vous utilisez.

Activer dans le fichier Config

Si vous souhaitez que ces changements pour survivre un redémarrage ou redémarrer le serveur MySQL, vous devrez les ajouter à votre fichier / etc / mysql / my.cnf pour le fichier de configuration MySQL. Notez que cela pourrait être dans un endroit différent sur votre installation.

Ouvrez le fichier avec un éditeur de texte en mode root sudo ou, puis ajouter ces valeurs si elles n'existent pas déjà dans le fichier. Si elles existent, il suffit de les décommenter.

query_cache_size = 268435456 query_cache_type=1 query_cache_limit=1048576

La mise en cache de requêtes peut améliorer considérablement la vitesse de votre application web, surtout si votre application ne lit plus souvent. Surveiller l'état en utilisant les méthodes ci-dessus et voir comment il fonctionne au fil du temps.

Aucun commentaire:

Enregistrer un commentaire