كيفية تحسين أداء PostgreSQL وقاعدة بيانات Discourse

  • في بعض الأحيان يتعطل خادم قاعدة البيانات بسبب بعض الاستعلامات، وقد قيل لنا إننا بحاجة إلى تحسين PostgreSQL، هل لديك أي فكرة عن كيفية تحقيق ذلك؟
    في الشاشة أدناه، هذه هي موارد قاعدة البيانات الخاصة بنا
  • وحدة المعالجة المركزية: 4 vcpu
  • الذاكرة: 22 جيجابايت

إعجاب واحد (1)

أهلاً بالجميع، أعمل مع @Abdelrahman_MoHamed على هذا. لقد قمنا مؤخرًا بترحيل موقع يحتوي على حوالي 500 ألف موضوع و 3.5 مليون مستخدم إلى discourse. نحن نستضيف أنفسنا على GCP. خلال هذه العملية، ذكر شريكنا الذي ساعد في الترحيل أنه قد يكون من المنطقي تحسين Postgres للحصول على أداء مناسب من قاعدة البيانات. كان افتراضنا هو أن قاعدة البيانات ستأتي محسّنة لـ discourse فور إخراجها من الصندوق (ربما هي كذلك؟). ومع ذلك، نظرًا لاقتراحهم (اقتراح الشريك)، أردنا المتابعة هنا.

باختصار، هل هذه بعض الطرق الشائعة لتحسين Postgres لقاعدة بيانات بالأرقام المذكورة هنا؟

شكراً جزيلاً للمساعدة مقدماً!

إعجاب واحد (1)

هل لديك دليل أكثر تفصيلاً على أن قاعدة البيانات هي العامل المحدد، أو سبب هذه الأحمال على وحدة المعالجة المركزية؟ مخرجات ps أو top، على سبيل المثال.

إذا كانت قاعدة البيانات هي السبب، أتخيل أن هناك طريقة للسؤال عما هي الاستعلامات التي تعمل عليها.

قد تكون مثل هذه التفاصيل مفيدة.

إعجاب واحد (1)

شكرا لك @Ed_S سنضيف المزيد من البيانات هنا قريباً. نحن نراقب الأمور في الوقت الحالي. نقدر استجابتك.

إعجاب واحد (1)

يبدو هذا بالفعل مزيجًا غريبًا… ذاكرة 22 جيجابايت ولكن 4 وحدات معالجة مركزية افتراضية فقط؟ إفراط في استخدام الذاكرة، ولكن ربما عدد قليل جدًا من النوى.

عادةً ما يكون لديك خادم به وحدات معالجة مركزية افتراضية أكثر بكثير لكل جيجابايت.

ذلك لأن خدمة الويب متوازية جدًا ولكل Unicorn تحتاج فقط إلى حوالي 1 جيجابايت.

أعتقد أن كل Unicorn يمكن تشغيله على نواة مختلفة.

هذا ربما يكون سبب وصولك إلى استخدام 100٪ لوحدة المعالجة المركزية بسهولة.

أوصي بأن تفكر في الانتقال إلى تكوين 16/16 أو حتى 8/8 ومعرفة ما إذا كانت الأمور تتحسن.

هل يُسمح بالانحراف الصغير؟ هل وحيد القرن شيء مشابه لعمال PHP؟ حاولت بعض الوثائق شرح أن وحيد القرن هي في الواقع خوادم HTTP مع عمالها الخاصين الذين يقدمون الطلبات إلى Ruby، ولهذا السبب فهي مختلفة تمامًا. لكن كلاهما يتعامل مع طلبات HTTP مما يسمح بمزيد من الطلبات المتزامنة وبالتالي المزيد من عمال PHP والمزيد من وحيد القرن تحتاج إلى المزيد من ذاكرة الوصول العشوائي - وبالنسبة لي هذان الشيئان متشابهان إلى حد كبير.

صحيح أم خاطئ بشكل فظيع؟ أود أن أفهم المبدأ الآن، لأنني أعرف لماذا ومتى وكيف أضبط عمال PHP، لكن وحيد القرن مجرد مخلوقات غامضة وسحرية بالنسبة لي.

نعم، أعتقد أن هذا تشبيه عادل

إعجاب واحد (1)

ذات صلة: كيف يمكن للمسؤول معرفة ما إذا كان لديه عدد قليل جدًا، أو عدد كبير جدًا، من وحيد القرن لحركة مرور الويب الخاصة به؟

ذات صلة: كيف يمكن للمسؤول معرفة ما إذا كان لديه ذاكرة وصول عشوائي (RAM) أكثر بكثير مما يحتاجه؟

فهمي هو أن عدد وحيد القرن يتم قياسه بشكل عام وفقًا لعدد وحدات المعالجة المركزية، ولكن ليس بالضرورة - إذا، على سبيل المثال، تغير تكوين المضيف منذ الإعداد.

يجب أن يتم قياس كمية ذاكرة الوصول العشوائي وفقًا للمقدار المطلوب. لا أعرف ما إذا كان الاستيراد الضخم للعديد من المشاركات والمستخدمين يعني بالضرورة المزيد من ذاكرة الوصول العشوائي المطلوبة - سيكون السؤال، ما مقدار قاعدة البيانات التي يتم الوصول إليها لخدمة كل طلب ويب، أو كل مهمة عادية؟

بالنسبة لي، فإن فترة 10 دقائق من أقصى استخدام لوحدة المعالجة المركزية، على خلفية استخدام منخفض جدًا، لن تشير إلى مشكلة. (ستكون مشكلة إذا كان ذلك يعني أن منتدى مزدحمًا وحرجًا زمنيًا، مثل منتدى رياضي / قمار، قد تأخر في تقديم الصفحات في أوقات الذروة. لكن منتدى الخاص بي ليس حرجًا زمنيًا أو حرجًا للأداء.)

لا أعرف كيف يمكن للمرء حساب نطاق أوقات الاستجابة الأخيرة، ولكن قد تكون هذه معلومة جيدة للنظر فيها. إما من جانب خدمة الويب أو من جانب قاعدة البيانات.

إعجاب واحد (1)