PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Heroku Postgres DB è più lento dopo l'aggiornamento

L'ho già visto con un cliente che mi ha chiamato per un aiuto di emergenza.

Dopo aver curiosato con heroku bash alla fine abbiamo concluso che la nuova istanza si trovava su un server sottostante particolarmente occupato. Abbiamo eseguito un failover tramite la promozione del follower su un'altra macchina, a quel punto le prestazioni sono notevolmente migliorate, sebbene il failover stesso fosse impegnativo a causa dei problemi con il master.

Per quanto ne so, le istanze di Heroku sono nodi Amazon EC2 (Xen VM) che eseguono un container LXC per isolare i cluster di database di ciascun utente Heroku. LXC offre un isolamento piuttosto minore rispetto a una VM completa; le istanze possono contendersi RAM, I/O su disco, CPU e così via, a seconda della politica esatta configurata con OpenCZ, di qualsiasi politica del gruppo di controllo, ecc.

Se ti trovi in ​​un'istanza in cui gli altri utenti non stanno facendo molto e se il container consente al tuo DB di utilizzare risorse che non sono attualmente richieste da altri utenti, potresti facilmente vedere prestazioni costantemente superiori a quelle garantite.

Sospetto che le persone con piani heroku più grandi abbiano maggiori probabilità di utilizzare effettivamente le risorse del sistema con cui condividi un container.

Se esegui un failover della promozione su un'istanza più grande in cui tutti gli utenti sono presenti perché hanno davvero bisogno delle risorse offerte dalla macchina più grande, potresti effettivamente ottenere meno risorse complessive, perché tutti stanno effettivamente utilizzando le proprie condivisioni.

È frustrante che Heroku offra così poca visibilità sui sistemi che eseguono i loro DB. È difficile dire come/se bilanciano il carico tra host di container, qual è il carico sottostante sul sistema, ecc.

In un commento, @Forrest ha sottolineato che Heroku ha un utile pagina sui dettagli del loro server , mostrando che solo i livelli inferiori sono multi-tenant, ma i livelli superiori no. Ciò spiegherebbe facilmente la perdita di prestazioni osservata qui e si adatterebbe ai miei commenti precedenti sul fatto che il piano inferiore consentiva a Forrest di prendere in prestito risorse inutilizzate da altri utenti.