# Postgres يستهلك 100% CPU لقواعد البيانات الكبيرة، Discourse 2.7.7

**URL:** <https://meta.discourse.org/t/postgres-has-100-cpu-for-large-databases-discourse-2-7-7/202106>\
**Category:** Self-hosting\
**Tags:** server-resources\
**Created:** [30 أغسطس 2021، 11:36ص UTC](https://meta.discourse.org/t/postgres-has-100-cpu-for-large-databases-discourse-2-7-7/202106 "2021-08-30T11:36:37Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![dmorlock](https://avatars.discourse-cdn.com/v4/letter/d/7993a0/32.png) [@dmorlock](https://meta.discourse.org/u/dmorlock)\
**Post date:** [30 أغسطس 2021، 11:36ص UTC](https://meta.discourse.org/t/postgres-has-100-cpu-for-large-databases-discourse-2-7-7/202106/1 "2021-08-30T11:36:37Z")

</div>

مرحباً،

نقوم بتشغيل Discourse 2.7.7 المعتمد على Docker مع قاعدة مستخدمين ضخمة. بعد الترقية من الإصدار 2.4.2 إلى 2.7.7، نواجه مشكلة حيث تعلق بعض عمليات Postgres عند استهلاك 100% من وحدة المعالجة المركزية. وأظهرت التحقيقات الإضافية أن الاستعلامات التالية تبدو هي المسبب للمشكلة:

```plaintext
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)

```

لقد عثرنا على هذا الاستعلام، وأعتقد أنه سيسبب عبئاً هائلاً، أليس كذلك؟

```plaintext
        | | SELECT user_id +
        | | FROM posts +
        | | WHERE TRUE OR p1.id IN (-1) +

```

هل لديكم أي اقتراحات بخصوص ذلك؟  
أخبروني إذا كنتم بحاجة إلى مزيد من المعلومات.

شكراً لكم،  
دانيال.

---

_[View the full topic](https://meta.discourse.org/t/postgres-has-100-cpu-for-large-databases-discourse-2-7-7/202106)._
