PostAlerter-Job hängt/OOMs seit kurzem

Seit FEATURE: new watched_precedence_over_muted setting (#22252) · discourse/discourse@9cf981f · GitHub (vermutlich!) füllen sich unsere Sidekiq-Warteschlangen/OOM mit feststeckenden PostAlert-Jobs:

Da dieser Commit bereits eine ähnliche Regression hatte (FIX: error when CategoryList tried to find relevant topics by lis2 · Pull Request #22339 · discourse/discourse · GitHub) ist er ziemlich verdächtig - wir werden jetzt versuchen, auf einen Commit vor dem oben genannten zurückzustufen und werden mit den Ergebnissen berichten.

2 „Gefällt mir“

Ein Downgrade auf einen Commit vor dem genannten hat die feststeckenden PostAlert Sidekiq-Worker und die OOM-Bedenken tatsächlich behoben: Die wenigen PostAlert-Jobs, die jetzt in die Warteschlange gestellt werden, sind innerhalb von Sekunden statt Minuten abgeschlossen.

2 „Gefällt mir“

Ping @kris.kotlarek

1 „Gefällt mir“

Ich habe gerade gesehen, dass FIX: improve performance of post alerter job (#22378) · discourse/discourse@7a204e7 · GitHub gepusht wurde – ich werde das später ausprobieren, wenn dies eine Lösung für dieses Problem sein soll.

2 „Gefällt mir“

Hallo, ja, dies wird dieses Problem hoffentlich lösen. Ich habe diese Lösung in 3 Foren getestet, und eine neue Abfrage war immer viel schneller und hat die Server nicht überlastet.
Vielen Dank, dass Sie dieses Problem gemeldet haben, und lassen Sie mich bitte wissen, wenn Sie weiterhin Probleme haben.

4 „Gefällt mir“

Leider dauern PostAlert-Jobs auch mit diesen Änderungen noch viel länger als zuvor und blockieren die Sidekiq-Worker vollständig bei der Verarbeitung. :frowning:

(wir haben über 10 Millionen Benutzerzeilen und einige standardmäßig stummgeschaltete Kategorien, sodass viele Stummschaltungen eingerichtet sind!)

Das Zurücksetzen der drei Commits, die diesen Job kürzlich berührt haben, und das Neustarten des Containers, währenddessen die Jobs problemlos abgeschlossen werden.

3 „Gefällt mir“

Danke, ich werde es mir noch einmal ansehen

Ich habe gerade einen weiteren Versuch zur Verbesserung der Leistung dieses Jobs zusammengeführt:

Ich habe ihn auf einigen Instanzen getestet und er war in Ordnung, aber sie waren kleiner als Ihre.
Wenn er mit diesem Commit immer noch fehlschlägt, könnten Sie mir dann den EXPLAIN ANALYSE-Bericht zur Verfügung stellen? Skript zum Generieren:

topic = Topic.last
user_option_sql_fragment =
  if SiteSetting.watched_precedence_over_muted
    <<~SQL
    INTERSECT
    SELECT user_id FROM user_options WHERE user_options.watched_precedence_over_muted IS false
    SQL
  else
    <<~SQL
    EXCEPT
    SELECT user_id FROM user_options WHERE user_options.watched_precedence_over_muted IS true
    SQL
  end
user_ids_sql = <<~SQL
  (
    SELECT user_id FROM category_users WHERE category_id = #{topic.category_id.to_i} AND notification_level = #{CategoryUser.notification_levels[:muted]}
    UNION
    SELECT user_id FROM tag_users tu JOIN topic_tags tt ON tt.tag_id = tu.tag_id AND tt.topic_id = #{topic.id} WHERE tu.notification_level = #{TagUser.notification_levels[:muted]}
    EXCEPT
    SELECT user_id FROM topic_users tus WHERE tus.topic_id = #{topic.id} AND tus.notification_level = #{TopicUser.notification_levels[:watching]}
  )
  #{user_option_sql_fragment}
SQL
sql = User.where!("id IN (#{user_ids_sql})").to_sql

sql_with_index = <<SQL
EXPLAIN ANALYZE #{sql};
SQL
result = ActiveRecord::Base.connection.execute("#{sql_with_index}")
puts sql_with_index
result.each do |r|
  puts r.values
end

Das würde mir helfen, einen fehlenden Index oder den Teil dieser Abfrage zu finden, der so langsam ist.

3 „Gefällt mir“

Diese Änderung scheint die PostAlert-Jobs auf ihre normale Dauer zurückgesetzt zu haben und die Sidekiq-Instanzen nicht hängen zu lassen. Yay!

3 „Gefällt mir“

Dieses Thema wurde nach 3 Tagen automatisch geschlossen. Neue Antworten sind nicht mehr möglich.