J'ai une application de commerce électronique qui utilise MySQL, et j'aimerais qu'elle soit plus rapide. Lorsque vous accédez à un numéro de pièce sur le site Web auquel vous avez accédé auparavant, la pièce se charge rapidement car toutes les données nécessaires se trouvent déjà dans le pool de mémoire tampon INNODB. Cependant, si la partie # n'a jamais été chargée auparavant, ces données ne sont pas encore dans le pool de mémoire tampon, elles doivent donc être lues sur le disque, ce qui est lent. J'ai mis mon pool de mémoire tampon INNODB à 2 Go, et cette base de données entière est seulement environ 350 Mo, donc il y a beaucoup d'espace pour charger la base de données entière dans le pool de mémoire tampon. Je peux voir à partir des statistiques INNODB que seulement environ la moitié du pool de mémoire tampon est utilisé en ce moment.Comment précharger des tables dans le pool de mémoire tampon INNODB avec MySQL?
J'ai trouvé des références à une pré-chargement des données, aussi connu comme « l'échauffement » le pool de mémoire tampon, comme Quickly preloading Innodb tables in the buffer pool ou mysqldump.azundris.com/archives/70-Innodb-cache-preloading-using-blackhole .html. La stratégie consiste essentiellement à forcer un scan de table sur chaque table puisque MySQL n'a pas de moyen natif pour le préchargement des données.
Je ne veux pas créer manuellement un script qui répertorie toutes les tables de ma base de données et doit le faire. Comment puis-je créer un script qui passe et sélectionne automatiquement chaque table, et sélectionne automatiquement une colonne non indexée pour effectuer une analyse de table?
cet algorithme est simplement concis et brillant. Cela mettra en cache les données innodb. Je ne suis pas sûr si cela mettra en cache toutes les pages d'index innodb, mais votre algorithme peut être appliqué rapidement pour le faire. Je crois que MyISAM ne met en cache que les pages d'index MYI. Encore une fois, votre algorithme constitue la base pour passer à travers les tables et les index. Bravo (et +1) !!!! – RolandoMySQLDBA
Mine est seulement l'implémentation pour obtenir une liste de requêtes. L'idée vient de Mysql Performance Blog lié à la question. – Mchl