Procesos de Postgres corriendo sin parar y mal rendimiento tras reinstalar/restaurar

El fin de semana, en un esfuerzo por actualizar nuestro Foro, realicé una instalación limpia de VPS + Restauración.

Esto iba a resolver varios problemas para nosotros:

  • Renovar Ubuntu desactualizado
  • Actualizar Discourse
  • Actualizar a Postgres 15

Si bien, en general, las cosas fueron bien, después surgieron problemas con los procesos de Postgres que consumían el 100% de un núcleo. Sin embargo, los números de procesos variaban. Intenté varias cosas, desde una reconstrucción hasta reinicios. Actualmente estoy intentando un rake db:validate_indexes que ya lleva varias horas en ejecución sin ninguna respuesta. No estoy seguro de si había hecho esto antes y si se supone que debe ser más rápido.

Usar el foro funciona bien básicamente, pero definitivamente se ha ralentizado. Algunas tareas de ejecución más larga, como cargar perfiles de usuarios más activos, tardan notablemente más de lo habitual.

Estoy bastante seguro de que hay algunos problemas con la base de datos, pero me cuesta mucho averiguar cuáles son.

Tengo que decir que nuestra base de datos es bastante grande: tenemos alrededor de 150 GB después de la restauración y después de la creación de índices. Al monitorear el proceso de restauración, no he visto ningún error y la creación de índices salió bien a mi parecer.

¿Alguna idea sobre cómo abordar esto? Actualmente son 3 procesos de postgres; antes de un reinicio que hice hace unas horas eran 6; también he visto que se utilizaron los 16 núcleos después de la restauración.

EDITADO: Acabo de notar ahora que 3 procesos de sidekiq están ocupados con “indexando categorías para búsqueda”. ¿Podría ser todo esto simplemente la reconstrucción del índice de búsqueda? Si es así, ¿se puede resolver de otra manera? Cuando hagamos la restauración del sistema en vivo, esto será un gran problema si degrada el rendimiento durante varias horas o incluso días.

Ahora mismo solo hay una tarea de sidekiq ejecutándose con “Jobs::BackfillBadge”, pero todavía hay 7 procesos de postgres que parecen estar bloqueando el 100% de la CPU constantemente. Tengo mucha curiosidad por saber qué está pasando ahí.

Después de tales movimientos, es una buena idea ejecutar un vacuum para las estadísticas de la base de datos.

1 me gusta

¿Cuánta RAM y CPU tienes?

¿Cuánta memoria le das a postgres?

Ese servidor de pruebas tiene 32 GB, 16 núcleos, la configuración está establecida en 64 MB de memoria de trabajo.

EDITAR: Los búferes compartidos están en 8 GB.

Actualmente estoy haciendo un VACUUM que parece atascado.

No estoy seguro si está haciendo algo, pero ha estado ahí durante más de 30 minutos.

Puse el foro en modo de solo lectura y reinicié la VM para finalizar los 7 procesos de Postgres que estaban “atascados” allí antes. Poco después del reinicio, 2 de estos procesos de postgres volvieron y no cambiaron. No hay nada ejecutándose en sidekiq en este momento.

Realmente no querrás ejecutar un VACUUM completo. Todo lo que necesitas para recuperar el rendimiento es un VACUUM VERBOSE ANALYZE. No puedes ejecutar un FULL en un sitio en funcionamiento.

1 me gusta

No soy un experto en bases de datos enormes, pero haría que los búferes fueran dos o tres veces mayores.

Estoy seguro de que tienes índices de 8 GB.

:thinking: ¿Postgres recomienda no establecer nunca shared_buffers por encima del 40% de la memoria interna?

Dicho esto,

Es posible que su servidor esté subdimensionado.

2 Me gusta

¡Ajá! ¡Un consejo sensato de un experto! Así que tal vez tenía razón en que 8 GB/25% no es suficiente, y aunque 16 GB es más del 40%, podría seguir siendo una buena sugerencia porque…

1 me gusta

Chicos. como se dijo, este es un servidor de prueba, no hay tráfico en él. Este servidor definitivamente no es lo suficientemente bueno para uso en producción, pero ese no es el problema aquí. La pregunta es por qué vemos procesos de postgres atascados de esa manera (con un 100% de uso de CPU) y ralentizando las cosas drásticamente. Estábamos ejecutando el servidor de prueba con menor capacidad incluso hasta hace unos días; solo se amplió debido a la falta de espacio en disco para una restauración.

La máquina de producción se está ejecutando con 128 GB de RAM con la misma configuración de búfer compartido sin problemas; por lo tanto, no creo que haya un problema general con estas configuraciones y el tamaño del búfer compartido, especialmente no en una máquina de prueba privada sin tráfico.

Pero de todos modos, simplemente rehaceré la restauración y veré si algo salió mal, ya que aparentemente no hay una buena explicación para el comportamiento.