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

Heroku Postgres DB plus lent après la mise à niveau

J'ai déjà vu cela avec un client qui m'a appelé pour une aide d'urgence.

Après avoir fouillé avec heroku bash nous avons finalement conclu que la nouvelle instance se trouvait sur un serveur sous-jacent particulièrement occupé. Nous avons effectué un basculement via la promotion du suiveur vers une autre machine, à quel point les performances se sont considérablement améliorées - bien que le basculement lui-même ait été difficile en raison des problèmes avec le maître.

Autant que je sache, les instances de Heroku sont des nœuds Amazon EC2 (machines virtuelles Xen) qui exécutent un conteneur LXC pour isoler les clusters de bases de données de chaque utilisateur Heroku. LXC offre plutôt moins d'isolation qu'une VM complète; les instances peuvent rivaliser pour la RAM, les E/S de disque, le processeur, etc., en fonction de la politique exacte configurée avec OpenCZ, de toute politique de groupe de contrôle, etc.

Si vous êtes sur une instance où les autres utilisateurs ne font pas grand-chose et si le conteneur permet à votre base de données d'utiliser des ressources qui ne sont pas actuellement requises par d'autres utilisateurs, vous pourriez facilement voir des performances régulièrement supérieures à celles garanties.

Je soupçonne que les personnes bénéficiant de plans heroku plus importants sont plus susceptibles d'utiliser les ressources du système avec lequel vous partagez un conteneur.

Si vous faites un basculement de promotion vers une instance plus grande où tous les utilisateurs sont là parce qu'ils ont vraiment besoin des ressources offertes par la plus grande machine, vous pourriez en fait obtenir moins ressources globales, car tout le monde utilise réellement ses parts.

Il est frustrant que Heroku offre si peu de visibilité sur les systèmes qui exécutent leurs bases de données. Il est difficile de dire comment/s'ils équilibrent la charge entre les hôtes de conteneur, quelle est la charge sous-jacente sur le système, etc.

Dans un commentaire, @Forrest a souligné que Heroku avait un outil utile page sur les détails de leur serveur , indiquant que seuls les niveaux inférieurs sont mutualisés, mais pas les niveaux supérieurs. Cela expliquerait facilement la perte de performances observée ici et cadrerait avec mes commentaires ci-dessus selon lesquels le plan inférieur permettait à Forrest d'emprunter des ressources inutilisées à d'autres utilisateurs.