مرحباً،
نقوم بتشغيل Discourse 2.7.7 المعتمد على Docker مع قاعدة مستخدمين ضخمة. بعد الترقية من الإصدار 2.4.2 إلى 2.7.7، نواجه مشكلة حيث تعلق بعض عمليات Postgres عند استهلاك 100% من وحدة المعالجة المركزية. وأظهرت التحقيقات الإضافية أن الاستعلامات التالية تبدو هي المسبب للمشكلة:
discourse_prod=# select pid, datid, query from pg_stat_activity WHERE pid = '244906';
pid | datid | query
--------+---------+-------------------------------------------------------
244906 | 2068583 | DELETE FROM user_badges +
| | WHERE id IN ( +
| | SELECT ub.id +
| | FROM user_badges ub +
| | LEFT JOIN ( +
| | SELECT id user_id, current_timestamp granted_at+
| | FROM users +
| | WHERE id IN ( +
| | SELECT p1.user_id +
| | FROM post_custom_fields pc +
| | JOIN badge_posts p1 ON p1.id = pc.post_id +
| | JOIN topics t1 ON p1.topic_id = t1.id +
| | WHERE p1.user_id <> t1.user_id AND +
| | name = 'is_accepted_answer' AND +
| | p1.user_id IN ( +
| | SELECT user_id +
| | FROM posts +
| | WHERE TRUE OR p1.id IN (-1) +
| | ) +
| | GROUP BY p1.user_id +
| | HAVING COUNT(*) > 9 +
| | ) +
| | ) q ON q.user_id = ub.user_id +
| | +
| | WHERE ub.badge_id = 103 AND q.user_id IS NULL +
| | ) +
| |
(1 row)
لقد عثرنا على هذا الاستعلام، وأعتقد أنه سيسبب عبئاً هائلاً، أليس كذلك؟
| | SELECT user_id +
| | FROM posts +
| | WHERE TRUE OR p1.id IN (-1) +
هل لديكم أي اقتراحات بخصوص ذلك؟
أخبروني إذا كنتم بحاجة إلى مزيد من المعلومات.
شكراً لكم،
دانيال.