sql >> Base de Datos >  >> RDS >> PostgreSQL

Heroku Postgres DB más lento después de la actualización

He visto esto antes con un cliente que me llamó para pedir ayuda de emergencia.

Después de hurgar un poco con heroku bash finalmente llegamos a la conclusión de que la nueva instancia estaba en un servidor subyacente particularmente ocupado. Hicimos una conmutación por error a través de la promoción del seguidor a otra máquina, momento en el que el rendimiento mejoró considerablemente, aunque la conmutación por error en sí misma fue un desafío debido a los problemas con el maestro.

Por lo que sé, las instancias de Heroku son nodos Amazon EC2 (Xen VM) que ejecutan un contenedor LXC para aislar los clústeres de bases de datos de cada usuario de Heroku. LXC ofrece bastante menos aislamiento que una máquina virtual completa; las instancias pueden competir por RAM, E/S de disco, CPU, etc., según la política exacta configurada con OpenCZ, cualquier política de grupo de control, etc.

Si está en una instancia en la que los otros usuarios no están haciendo mucho y si el contenedor permite que su base de datos use recursos que otros usuarios no necesitan actualmente, podría ver fácilmente un rendimiento superior al garantizado.

Sospecho que es más probable que las personas con planes heroku más grandes utilicen los recursos del sistema con el que compartes un contenedor.

Si realiza una conmutación por error de promoción a una instancia más grande donde todos los usuarios están allí porque realmente necesitan los recursos que ofrece la máquina más grande, en realidad podría obtener menos recursos en general, porque todos están usando sus acciones.

Es frustrante que Heroku ofrezca tan poca visibilidad de los sistemas que ejecutan sus bases de datos. Es difícil saber cómo/si cargan el equilibrio entre los hosts del contenedor, cuál es la carga subyacente en el sistema, etc.

En un comentario, @Forrest señaló que Heroku tiene un útil página en los detalles de su servidor , lo que muestra que solo los niveles inferiores son multiusuario, pero los niveles superiores no lo son. Esto explicaría fácilmente la pérdida de rendimiento observada aquí y encajaría con mis comentarios anteriores de que el plan inferior permitía a Forrest tomar prestados recursos no utilizados de otros usuarios.