1 votes

Comment construire manuellement le cache mysql

J'ai une table de plus de 150 000 lignes dont la plupart seraient mises à jour quotidiennement. J'ai activé le cache mysql pour que les pages se chargent plus rapidement, cependant à chaque fois que la base de données est mise à jour, les pages se chargent lentement à nouveau, ce qui me laisse penser que le cache se reconstruit à nouveau.

Donc actuellement, j'ai dû recourir à faire un wget -m --delete-after [http://localhost/](http://localhost/) sur le serveur cependant cela prend environ 4 heures pour terminer et déplace quelque chose comme 13 gigaoctets.

Y a-t-il un moyen meilleur de faire cela?

3voto

Bill Karwin Points 204877

Le cache MySQL fonctionne différemment selon que vous utilisez le moteur de stockage MyISAM ou le moteur de stockage InnoDB.

MyISAM met en cache uniquement les index, pas les données. Vous pouvez utiliser LOAD INDEX INTO CACHE pour précharger les index MyISAM dans le cache du tampon de clés. Mais il n'y a pas d'instruction équivalente si vous utilisez InnoDB.

InnoDB met en cache à la fois les données et les pages d'index. Il n'y a pas de commande spécialisée pour préchauffer les tampons de cache, mais vous pouvez exécuter quelques instructions SQL qui effectuent des analyses complètes de table et des analyses complètes d'index pour les charger dans les tampons. Vous devriez pouvoir le faire en utilisant un script sur le serveur, sans avoir recours à wget!

Je suis d'accord avec la réponse de @code_burgar : 150k lignes sont suffisamment petites pour que vous ne remarquiez pas de pénalité de performance importante pendant que le cache se réchauffe.

Si vous parlez de réchauffer le Cache de Requête, c'est une question différente. Vous devrez réchauffer le Cache de Requête en utilisant des requêtes SQL spécifiques, car ce cache conserve les ensembles de résultats associés à ces requêtes SQL textuellement. Votre solution wget est inefficace et duplique probablement beaucoup de travail. Vous devriez pouvoir précharger le Cache de Requête en exécutant un script sur le serveur qui exécute chaque requête que vous souhaitez mettre en cache une seule fois.

Mais vous devrez peut-être effectuer une révision du code pour déterminer quelles sont ces requêtes, et mettre à jour périodiquement votre script de préchargement de cache si votre code change.

1voto

code_burgar Points 6845

150 000 lignes sont vraiment petites en termes de taille de table.

Votre table est-elle correctement indexée ?

Comment réalisez-vous la mise à jour, planifiez-vous et/ou dosez-vous les mises à jour ou les laissez-vous toutes se faire en une fois ?

Le ralentissement se produit probablement parce que vous essayez de mettre à jour trop de lignes à la fois sans laisser le serveur reprendre son souffle. Essayez de doser les mises à jour.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X