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

Réglage des performances des rails pour la production ?

J'ai passé du temps à régler mon application sur heroku, et j'ai passé du temps à travailler sur le réglage des performances des applications Rails dans une variété de paramètres.

Quand j'exécute ab -n 300 -c 75 ...myapp.com.... # qui est une sauvegarde de mon site principal, et est sur le plan cèdre gratuit avec licorne

Requests per second:    132.11 [#/sec] (mean)
Time per request:       567.707 [ms] (mean)
Time per request:       7.569 [ms] (mean, across all concurrent requests)

(c'est contre une page d'accueil qui ne fait rien d'intense, donc je le fournis uniquement comme un exemple "à quelle vitesse heroku pourrait-il être sur le plan gratuit avec une page très simple?", pas un exemple "vos applications devraient être aussi vite")

Voici ma liste de contrôle Rails Performance Tuning 101 :

  1. Mesurez d'abord le temps de chargement du navigateur/de la page (le navigateur fait beaucoup de requêtes, ab ne vous parle que de l'une d'entre elles, et généralement votre requête de page principale n'est pas le problème), obtenez les numéros de base de chargement de la page à partir d'outils comme www.webpagetest.org ou www.gtmetrix.com pour les pages publiques, ou les outils de navigation Yslow, google page speed ou dynatrace pour les pages privées. Si vous regardez le diagramme de cascade de chargement de page (le panneau 'Net' dans chrome/firefox), il montre généralement que votre html se charge rapidement (moins d'une seconde), mais que tout le reste prend 1 à 3 secondes pour se charger. Suivez les recommandations Yslow/vitesse de page sur la façon d'améliorer (assurez-vous que vous utilisez pleinement les éléments du pipeline d'actifs Rails 3.1)

  2. Lisez vos fichiers journaux/nouvelle relique pour trouver le point idéal de la requête "la plus lente/la plus fréquemment rencontrée", et analysez ce qui se passe pour cette requête (est-ce que c'est un ruby ​​lent/beaucoup d'utilisation de la mémoire, ou beaucoup de requêtes ?) Vous avez besoin d'avoir un moyen fiable de détecter et de surveiller les problèmes de performances, et de ne pas simplement changer les choses au hasard. Une fois que vous avez identifié certaines zones cibles, créez des scripts de test pour faciliter les tests avant/après et prouver que votre changement est utile, et détecter si une régression s'insinue.

  3. Le manque d'index sur les colonnes de la base de données est l'un des problèmes les plus courants et le plus facile à résoudre. Exécutez l'explication sur les requêtes cibles ou parcourez votre journal des requêtes lentes pour voir ce que fait le planificateur de requêtes. Ajoutez des index pour les clés étrangères, les colonnes de recherche ou les données primaires (index de couverture) selon le cas. Retestez avec des données de production réelles pour prouver que cela fait une différence. (vous pouvez exécuter expliquer dans heroku, ainsi que lancer des requêtes pour les index manquants ou inutilisés)

  4. La plupart des applications Rails peu performantes souffrent de requêtes N + 1 car il est si facile d'écrire order.owner.address.city et de ne pas penser à ce qui se passe lorsque cela est en boucle. Les requêtes N + 1 ne sont pas nécessairement des requêtes lentes, elles n'apparaissent donc pas dans le journal des requêtes lentes, c'est juste qu'il y en a beaucoup et qu'il est plus efficace de tout faire en même temps. Utilisez :include ou .includes() pour un chargement rapide de ces données, ou envisagez de faire votre requête d'une autre manière.

  5. Analysez le flux de votre application et recherchez des opportunités de mise en cache. Si l'utilisateur oscille entre la page d'index et une page de détails, et vice-versa, peut-être qu'une vue ajax des détails, sans quitter la page d'index, lui fournirait les données dont il a besoin plus rapidement. J'ai écrit quelques d'autres réflexions à ce sujet sur mon blog

J'ai fait une présentation sur ces techniques et d'autres idées à Chicago lors de la conférence WindyCityRails de cette année. Vous pouvez voir la vidéo ici sur mon www.RailsPerformance blog .com Ce que j'aime chez heroku, c'est qu'il faut être évolutif dès le départ. Lorsque vous regardez les discussions sur la liste de diffusion, vous voyez que la plupart des gens connaissent les meilleures pratiques en matière de performances et comment tirer le meilleur parti du serveur. J'aime aussi la façon dont vous, si vous voulez rester bon marché, vous apprenez les astuces de réglage des performances qui vous rapporteront le plus.

Bonne chance !