Se añadió una nueva función en mayo Selective dismissal of New and Unread topics. Recientemente hemos actualizado a la última versión de Discourse y, al revisar el código y los registros de nuestra base de datos, parece que cuando los usuarios hacen clic en “Ocultar nuevos” sin seleccionar nada (es decir, solo ocultan en masa), enviamos tracked = false y ningún otro parámetro en la solicitud a reset-new.
y, como no pasamos ningún topic_id, saltamos la instrucción if y vamos directamente a la línea 989.
Operamos un servidor de Discourse bastante grande y creo que la idea de tener simplemente todos los temas es muy costosa, ya que la consulta genera básicamente:
LEFT JOIN topic_users ON topic_users.topic_id = topics.id AND topic_users.user_id = xxx WHERE "topics"."deleted_at" IS NULL AND "topics"."id" IN (1, ... 1000000) AND (topics.created_at >= 'date') AND (topic_users.last_read_post_number IS NULL) AND (topics.archetype <> 'private_message') ORDER BY topics.created_at DESC LIMIT 500
La cláusula IN, creo que incluye casi todos los temas, en el rango de más de 1 millón.
¿Podemos establecer que la selección en masa pase por defecto solo los IDs de los temas en lugar de optar por todos los temas posibles?
@martin Hola, disculpa la notificación; parece que tú fuiste quien subió el commit en cuestión enlazado arriba.
¿Tendrías la amabilidad de verificar si esto parece ser la causa raíz de lo que estamos observando? Estamos viendo listas de filtros enormes en las consultas (~un millón de IDs de temas) en el caso predeterminado de “descartar todos los nuevos”. (nuestro foro alberga miles de temas de Discourse)
Podríamos ayudar con un PR para resolverlo si el equipo de Discourse no tiene prioridad para esto, pero dudo que seamos los únicos afectados; esto también podría estar impactando el rendimiento de la base de datos de algunos de tus clientes.
Gracias @forkythetoy y @Hooksmith por traer esto a mi atención. Confirmé que esta es una consulta enorme, incluso aquí en meta. Escribiré una solución para esto hoy; debería ser tan simple como usar solo los IDs de los temas que aparecen en la lista “Nuevo” para un usuario, en lugar de todos los temas de la historia. Publicaré aquí cuando tenga el parche.