فهم تجميع قواعد البيانات لعاملين Sidekiq

هل يمكن لأحد أن يقدم توضيحًا حول تجميع قواعد بيانات عمال Sidekiq؟

حاليًا، قمنا بتعيين DISCOURSE_DB_POOL إلى 15، مع عاملين Sidekiq، لكل منهما تزامنية تبلغ 10. بعد قراءة وثائق Sidekiq، يبدو أن خيوط Sidekiq تشترك في مجمع قاعدة البيانات، ومن ثم أتوقع حدًا أقصى قدره 15 * 2 = 30 اتصالًا بقاعدة البيانات من عمال Sidekiq. ومع ذلك، على الرغم من هذا الفهم، نلاحظ ارتفاعات في اتصالات قاعدة البيانات تتجاوز الحد الأقصى المتوقع البالغ 30.

تحدث هذه الارتفاعات تقريبًا كل 15 دقيقة ويبدو أنها مرتبطة بشكل أساسي بالوظيفة المجدولة PeriodicalUpdates.

هل يمكن لأي شخص تقديم رؤى تساعدنا في تجنب هذه الارتفاعات؟

@david لقد لاحظت أنك قمت بعمل مذهل في هذا المجال. هل يمكنك تقديم بعض الأفكار؟

أخشى أنني لا أعرف تفاصيل كيفية عمل كل هذا على الفور.

قد يكون من المفيد التحقق مما إذا كنت قد قمت بتخصيص متغير البيئة UNICORN_SIDEKIQS. يشير هذا إلى عدد عمليات sidekiq التي يتم تشغيلها (كل منها سيكون له العديد من الخيوط).

ما الذي يظهره الرسم البياني الخاص بك بالضبط؟ هل هو “الاتصالات المتزامنة”؟ أم أنه “عدد الاتصالات التي تم إنشاؤها”؟ إذا كان الأخير، فربما يتم إنشاء بعض الاتصالات وتدميرها بسرعة كبيرة.

وسؤال أخير: ما المشكلة التي تحاول حلها هنا؟ هل هناك أي مشكلة ناتجة عن عدد الاتصالات؟

شكراً على عودتك.\n\nفيما يلي التكوينات ذات الصلة التي لدينا:\n\n* DISCOURSE_DB_POOL: “15”\n* DISCOURSE_SIDEKIQ_WORKERS: “10”\n* UNICORN_SIDEKIQS: “2”\n\nهذا يعني أن لدينا عمليتي Sidekiq، كل منهما بها 10 خيوط.\n\nيوضح الرسم البياني العدد الحالي لاتصالات العميل.\n\nنحن نحاول تكوين حجم تجمع الاتصال (RDS proxy أمام PostgreSQL) بشكل صحيح. للقيام بذلك، نحتاج إلى فهم أفضل لتجميع الاتصالات من جانب التطبيق. لماذا لا يحترم التطبيق تكوين DISCOURSE_DB_POOL كما هو متوقع؟\nإذا كان DISCOURSE_DB_POOL يعمل كما هو متوقع، فلماذا نرى مثل هذه الزيادات الكبيرة في اتصالات قاعدة البيانات؟ يبدو أن هذه الزيادات تتماشى مع تشغيل الوظيفة المجدولة PeriodicalUpdates.\n\nيرجى إعلامي إذا كان لديك المزيد من الأسئلة. أقدر المساعدة في كشف هذا اللغز.

هل نحتاج إلى أي ملفات تكوين بالإضافة إلى متغير البيئة DISCOURSE_DB_POOL لتكوين تجميع قاعدة البيانات؟

هل أنت متأكد بنسبة 100% أن الوكيل الخاص بك ليس هو السبب هنا؟

نعم، لا أعتقد أن الوكيل هو المخطئ هنا.