PostAlerter-Job hängt/OOMs seit kurzem

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“