9 comments so far
Merci pour l’article !
Ah parfait, tu viens de donner la réponse que j’ai posé sur le blog de http://www.noidea.ca/2009/10/10/mysql-query-cache/
Bonne continuation
Bonjour Olivier
Premièrement merci de spécifier que la grosseur de la cache est 0 par défaut. Il est vrai que la cache est activée par défaut, mais avec une grosseur de 0 ce qui la rend inutilisable. Je vais corriger l’article.
Je me permets par contre de préciser quelques points. Il est vrai qu’il n’est pas commun de modifier des valeurs directement dans la DB, mais ce sont des choses qui arrivent, même dans un environnement de production. Il faut aussi se remettre en contexte: il s’agit d’implémenter une cache sur un simple Site Web – pas sur une application. Si le menu du site se trouve dans une table, il a fort à parier qu’il devra être modifié directement dans la base de données pour être mis à jour. Je ne juge pas ici la pertinence de mettre ce type de données dans une base.
Je comprends que la cache de requête n’est pas une solution magique. Oui, le type de requête influence son comportement. Comme tu as expliqué, on peut facilement invalider une grosse partie de la cache et l’exercice de remettre en cache à bien sur un coût. L’invalidation elle-même a un coût non négligeable. Mais je reviens encore au contexte. Pour un Site Web possédant un CMS, la majorité des requêtes se font en lecture. C’est un cas typique où la cache de MySQL brille. Le gain est quasi assuré.
Il n’était pas question dans mon article d’optimisation très haut niveau, ce que tu sembles reprocher à ma réponse. Bien sur, je vais préférer memcached à la query cache de MySQL pour plusieurs raisons afin d’avoir une performance accrue. C’était un article qui se voulait une introduction aux deux différents types de cache.
Salut Olivier,
Un point important et que le cache APC ou Xcache se situe sur un autre niveau dans l’archi. Il est redondant sur tous les serveurs WEB et protege ainsi la BDD de chaque internaute , Il presente a la BDD un nombre de connections = au nombre de serveurs WEB. Tout comme celui de MySQL sa taille doit reste petite donc pour les grosses volumetries restant longtemps en cache il faut s’orriente vers un cache distribue comme memcached … une bonne architecture possede tout ces niveaux avec en plus un cache du statique sur CDN et navigateur
, Deplus APC , memcache ne souffre pas de la concurrence car il n’ont pas l’obligation d’etre exacte, car il peuvent toujours sortir la version anterieur pendant que la nouvelle version est ecrite , donc pas de MUTEX. Un autre atout et que le cache PHP local fait economiser le cout du reseau et la copie memoire inter process sous reserve de ne pas utiliser un wrapper lib client , enfin le cout de l’authentification MySQL est aussi supprimer , soit 3ms et plus si pas de skip-name-resolv, mais ca c’est pour un autre de tes billets
merci pour l’article…juste une petite remarque, la variable Qcache_lowmem_prunes signifie plutôt de taux de fragmentation du cache. Il doit tendre vers 0 pour être efficace. S’il augmente, le cache doit être défragmenté.
@Pat: bien noté ! merci
@Greg, Macsim: Merci ![]()
@Stéphane: Merci pour ces précisions
@Benoit: Qcache_lowmem_prunes indique que MySQL est obligé de faire de la place dans le cache (en supprimant des requêtes) pour mettre en cache de nouvelles requêtes. Cela peut effectivement venir d’une fragmentation du cache mais pas obligatoirement. Il doit bien sur être bas.
Petite question, quel serait votre rétissance à activer le qwery_cache sur une application web php/MySQL 5.0.67 qui gère de facture, des inventaire ect..
Bonjour Christian,
t’as question est bien vague ![]()
Comme dit dans le billet, c’est plus sur des critères de types de requêtes, de type de moteurs , de RAM que sur des critères de fonctionnalités que les choix se font.
Maintenant le seul moyen vraiment efficace et de faire des tests en conditions proches de la prod.
Merci de ta réponse, c’est vrai que c’était un petite histoire courte!


[...] Olivier Dasini : MySQL Query cache () [...]
[...] Olivier Dasini : MySQL Query cache (0 visite) [...]
[...] This post was Twitted by HerveThouzard [...]
[...] http://dasini.net/blog/2009/10/12/mysql-query-cache/ (lu rapidement, mais le cache de requête est visiblement fait par défaut sur une conf mysql récente) [...]