Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql lent sur la première requête, puis rapide pour les requêtes associées

Les pages des fichiers de données innodb sont mises en cache dans le pool de mémoire tampon innodb. C'est ce à quoi vous vous attendez. La lecture des fichiers est lente, même sur de bons disques durs, en particulier les lectures aléatoires, ce que voient principalement les bases de données.

Il se peut que votre première requête effectue une sorte d'analyse de table qui tire beaucoup de pages dans le pool de mémoire tampon, puis y accéder est rapide. Ou quelque chose de similaire.

C'est ce à quoi je m'attendais.

Idéalement, utilisez le même moteur pour toutes les tables (exceptions :tables système, tables temporaires (peut-être) et tables très petites ou éphémères). Si vous ne le faites pas, ils doivent se battre pour le bélier.

En supposant que toutes vos tables sont innodb, faites en sorte que le pool de mémoire tampon utilise jusqu'à 75 % de la RAM physique du serveur (en supposant que vous n'exécutez pas trop d'autres tâches sur la machine).

Ensuite, vous pourrez mettre environ 12 Go de votre base de données dans la RAM, donc une fois qu'elle sera "réchauffée", les 12 Go "les plus utilisés" de votre base de données seront dans la RAM, où l'accès est agréable et rapide.

Certains utilisateurs de mysql ont tendance à "préchauffer" les serveurs de production suite à un redémarrage en leur envoyant pendant un certain temps des requêtes copiées depuis une autre machine (ce seront des esclaves de réplication) jusqu'à ce qu'ils les ajoutent à leur pool de production. Cela évite l'extrême lenteur constatée lorsque le cache est froid. Par exemple, Youtube le fait (ou du moins c'était le cas ; Google les a achetés et ils peuvent maintenant utiliser Google-fu)