Cargas de perfil lentas con base de datos de más de 100 GB

Continuando con esta publicación: Slow Page Loads on User Profiles

Estamos probando nuestra importación a Discourse nuevamente ahora que se implementaron estos cambios, y ha habido una mejora en la carga de perfiles (especialmente después de la carga inicial cuando los datos están en la caché), pero aún tarda de 5 a 10 segundos en cargar algunos perfiles. ¿Hay algo más que se pueda hacer para ayudar en esto? Estas parecen ser las consultas problemáticas:

2 Me gusta

¿Cómo instalaste Discourse?

1 me gusta

Instala el contenedor de Docker siguiendo las instrucciones.

1 me gusta

¿Cuánta RAM? ¿Qué tamaño tiene tu base de datos?

1 me gusta

Esta VM tiene 8 núcleos y 32 GB de RAM. Creo que la base de datos tiene alrededor de 40 GB, pero no estoy 100% seguro en este momento.

1 me gusta

¿Sigue ocurriendo la carga lenta de la página de perfil si:

  • ves la página de perfil de un usuario anónimo (sin iniciar sesión)?

  • ves la página de perfil de un usuario regular en comparación con un usuario del personal?

2 Me gusta

Sí, a ambas. Lo he probado con un usuario normal y cerrando sesión, y el comportamiento parece ser aproximadamente el mismo.

Intenté una exportación y restauración (re: Restore Failing - Check Free Disk Space), pero eso no parece haber cambiado el comportamiento. También vale la pena mencionar que frecuentemente obtengo un error al intentar ver estas páginas de perfil. Esto aparece después de varios segundos de intentar cargar la página.

La base de datos ahora tiene 104 GB después de la restauración.

Ese tema trataba principalmente sobre varias consultas N+1 que teníamos en esa ruta, las cuales ya han sido corregidas.

La página de perfil tiene algunas consultas pesadas, ya que genera un resumen muy personalizado y completo del usuario, pero una base de datos de tamaño razonable debería poder renderizarla en menos de 500 ms.

Esa es una base de datos grande para una máquina virtual pequeña. ¿Estás ejecutando todo en la misma VM (Web+DB+Redis)?

¿Estás usando la última versión de PostgreSQL 13? ¿Podrías intentar ejecutar las tareas de rendimiento opcionales descritas en Actualización de PostgreSQL 13, tanto el vacuum como el reindex?

3 Me gusta

Los usuarios con el problema son aquellos que tienen muchas publicaciones. Las páginas de perfil de usuarios con pocos mensajes se cargan de inmediato, como se esperaba.

Quizás deba ajustar mis expectativas aquí. ¿Se consideran 8 núcleos y 32 GB de RAM algo pequeño para Discourse? (Sí, estamos ejecutando una instalación en un solo contenedor.) En nuestro software actual, este foro funciona sin problemas con 2 núcleos y 8 GB de RAM.

En cuanto a la base de datos, es un contenedor recién creado que se inició en la versión 13.1. ¿Sería necesario ejecutar vacuum y reindex justo después de una restauración?

1 me gusta

El vaciado es definitivamente recomendable para una base de datos de ese tamaño.

3 Me gusta

Empecé esto poco después de tu publicación. La operación de vacío se completó muy rápido, pero la reindexación sigue en curso, más de 24 horas después de haberla iniciado. ¿Es eso normal? ¿Cuánto tiempo se espera que tome? ¿Cómo puedo determinar qué recurso (si es que hay alguno) está limitado? No veo que postmaster utilice más de 2-4 núcleos la mayor parte del tiempo, y parece que hay mucha RAM disponible.

1 me gusta

Lamento informar que el reindexado sigue en ejecución.

@Falco @codinghorror @pfaffman

@Ghan y yo hemos estado trabajando durante el último año para perfeccionar y asegurar que la importación funcione para nuestra comunidad, pero la pregunta que me ronda la mente es la siguiente: ¿Hay alguna otra consideración que debamos tener en cuenta al importar una comunidad con más de 25 millones de publicaciones?

¿Existen comunidades de ese tamaño en Discourse?

Al observar la lista pública de clientes, noté que, al menos entre los que puedo ver, nadie se acerca a nuestro tamaño. Imagino que hay miles o decenas de miles de clientes más que no puedo ver. Hemos completado con éxito nuestra importación y funciona en nuestro entorno, pero seguimos tropezando con problemas como el de carga de perfiles en cuentas con grandes cantidades de publicaciones y ahora este problema de reindexación.

¿Podrían darnos algún consejo para facilitar esta transición?

1 me gusta

Encontré el comando rake db:stats en otro post.
La reindexación aún se está ejecutando, así que no estoy seguro de si estos números son 100% definitivos.

3 Me gusta

Sí, como mencioné en otro tema, tenemos instancias con bases de datos de 1 GB e instancias con bases de datos de 500 GB. Pero esas instancias se ejecutan en máquinas virtuales de tamaños completamente diferentes.

¿Cómo es el rendimiento del disco en tu servidor? ¿Utiliza discos duros mecánicos antiguos?

2 Me gusta

Tenemos dos SSD NVMe Intel P3600 de 1,2 TB configurados con espejo ZFS en el servidor host.

2 Me gusta

Lo siguiente que hay que revisar es la optimización de PostgreSQL. ¿Estás utilizando los valores predeterminados en app.yml?

1 me gusta

Sí. No estaba seguro de si el lanzador establecería automáticamente algunos valores en función de los recursos que detecta en la máquina anfitriona o si existían algunas pautas recomendadas para el ajuste. ¿Hay alguna guía en algún lugar para ajustar la base de datos?

Hay algunos comentarios en el archivo app.yml, aunque está realmente optimizado para sitios autoalojados más pequeños. Probablemente quieras aumentar los valores de la configuración allí (no recuerdo sus nombres exactos). Tendrás que consultar fuentes más generales sobre PostgreSQL para obtener más información.

No es que Discourse no pueda manejar una comunidad de tu tamaño; simplemente es diferente a administrar una más pequeña y un poco más difícil.

3 Me gusta

Gracias, definitivamente lo revisaré. No estoy familiarizado con Postgres, pero espero que los mismos principios se apliquen tras años de usar MySQL.

Definitivamente. Siento que una vez que logremos avances en cuanto a qué tipos de cambios deben realizarse, las cosas fluirán mucho mejor.

3 Me gusta