Comment vider le cache de la base de données dans MySQL 8 innodb
P粉571233520
2023-08-27 23:46:28
<p>J'ai essayé d'exécuter la même requête plusieurs fois sur la même base de données et la même table MySQL 8. </p>
<p>Je dois mener des expériences pour déterminer si le réglage de la requête et/ou de la table elle-même peut améliorer les performances. Cependant, après le premier essai, le temps de réponse est beaucoup plus rapide, je pense parce que les données sont mises en cache. </p>
<pre class="brush:php;toolbar:false;">mysql 8 innodb</pre>
<p>De quelles options ai-je besoin pour vider le cache afin d'obtenir les données à partir de zéro. </p>
<heure />
<p>Il semble que les réponses proposées précédemment soient toutes liées à MySQL 5, et non à MySQL 8. La plupart des commandes semblent désormais obsolètes. </p>
<p>Vider le cache des requêtes MySQL sans redémarrer le serveur</p>
Si la requête est fréquemment exécutée en production, alors je pense que votre objectif est en retard. Je vous suggère d'exécuter la requête deux fois et d'utiliser le timing de la deuxième requête. De cette façon, c'est plus proche de ce que verra la production : les données sont déjà dans le cache.
(Bill explique que le « cache de requêtes » n'a pas d'importance, le « pool de tampons » oui.)
C'est une technique que j'aime pour tester des requêtes sans avoir à construire une table suffisamment grande pour voir les changements au fil du temps :
Ces chiffres correspondent au nombre réel de lectures/écritures de données ou de lignes d'index. Le nombre peut ressembler au nombre de lignes de sortie, au nombre de lignes dans un tableau, etc. Cela vous permet de savoir s'il y a, par exemple, une analyse complète de la table (ou de l'index). Une valeur « Handler_write% » différente de zéro indique qu’une ou plusieurs tables temporaires sont requises.
Voir aussi
EXPLAIN ANALYZE
si votre version est disponible.Plus de conseils : Index des recettes
La question à laquelle vous avez lié concerne le cache de requêtes, qui a été supprimé dans MySQL 8.0, il n'est donc plus nécessaire de le vider.
Votre formulation suggère que vous posez des questions sur le pool de mémoire tampon, qui est différent du cache de requêtes. Le pool de mémoire tampon met en cache les données et les pages d'index, tandis que le cache de requêtes (le cas échéant) met en cache les résultats des requêtes.
Il n'existe aucune commande pour vider le pool de tampons sans redémarrer le serveur MySQL. Les pages restent mises en cache dans le pool de mémoire tampon jusqu'à ce qu'elles soient expulsées par d'autres pages.
Le pool de tampons est situé dans la RAM, donc si le processus du serveur MySQL est redémarré, son contenu sera effacé. Par conséquent, si vous souhaitez repartir de zéro, vous devez redémarrer le processus (vous n'avez pas besoin de redémarrer l'intégralité du système d'exploitation, redémarrez simplement le service MySQL).
Il convient de noter que dans MySQL 8.0, le contenu du pool de tampons ne sera pas complètement effacé lors du redémarrage. Un pourcentage du contenu du pool de mémoire tampon est enregistré lors de l'arrêt et automatiquement rechargé au démarrage. Cette fonctionnalité est activée par défaut, mais vous pouvez choisir de la désactiver.
En savoir plus à ce sujet :