È stata aggiunta una nuova funzionalità a maggio Selective dismissal of New and Unread topics. Abbiamo recentemente aggiornato all’ultima versione di Discourse e, esaminando il codice e i log del database, sembra che quando gli utenti cliccano su “Ignora nuovi” senza selezionare nulla (cioè solo un’eliminazione di massa), inviamo tracked = false e nessun altro parametro nella richiesta a reset-new.
E poiché non inviamo alcun topic_id, saltiamo l’istruzione if e passiamo direttamente alla riga 989.
Gestiamo un server Discourse piuttosto grande e penso che l’idea di includere tutti i topic sia molto costosa, dato che la query genera essenzialmente:
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 clausola IN contiene, credo, quasi tutti i topic, nell’ordine di oltre 1 milione.
Possiamo impostare come predefinito per la selezione di massa l’invio degli ID dei topic invece di predefinire tutti i possibili topic?
@martin Ciao, scusa per la notifica, sembra che tu abbia inviato il commit in questione collegato sopra.
C’è la possibilità che tu possa verificare se questa sembra essere la causa principale di ciò che stiamo riscontrando? Stiamo vedendo enormi liste di filtri nelle query (~un milione di ID argomento) nel caso predefinito di “dimentica tutti i nuovi”. (il nostro forum ospita migliaia di argomenti Discourse)
Potremmo aiutare con una PR per risolverlo se il team di Discourse non ha priorità per questo, ma dubito che siamo gli unici colpiti da questo problema; potrebbe anche influenzare le prestazioni del database di alcuni dei vostri clienti.
Grazie @forkythetoy e @Hooksmith per avermi portato alla sua attenzione. Ho confermato che si tratta di una query enorme, anche qui su meta. Scriverò una correzione oggi: dovrebbe essere semplice, utilizzando solo gli ID dei topic che appaiono nella lista “Nuovi” per un utente, anziché tutti i topic mai creati. Tornerò a scrivere qui quando avrò la patch.