فشل إعادة التعيين بسبب الجمود

لدي قاعدة بيانات ضخمة (9.2 مليون منشور) تحتوي على عدد من المواضيع العملاقة (بعضها يتجاوز 150 ألف منشور!). عندما أحاول إجراء استعادة إلى خادم آخر، أواجه خطأً من هذا القبيل أثناء عملية إعادة تعيين اسم المضيف الجديد:

جاري استعادة الملفات المرفقة، قد يستغرق هذا بعض الوقت...
جاري تحسين أيقونات الموقع...
سيتم إعادة معالجة المنشورات بواسطة مهمة في الخلفية عبر Sidekiq. ستظهر الصور مفقودة حتى اكتمال هذه العملية.
يمكنك تسريع العملية بتشغيل الأمر يدويًا: "rake posts:rebake_uncooked_posts"
استثناء: خطأ: تم اكتشاف تعارض (deadlock)
التفاصيل: العملية 960 تنتظر قفل مشاركة (ShareLock) على المعاملة 4765؛ محجوبة بواسطة العملية 2184.
العملية 2184 تنتظر قفل مشاركة على المعاملة 4915؛ محجوبة بواسطة العملية 960.
تلميح: راجع سجل الخادم للحصول على تفاصيل الاستعلام.
السياق: أثناء تحديث الصف (566294,13) في العلاقة "posts"

هل هناك إجراء يمكنني اتخاذه لحل هذا التعارض؟

حدث هذا على قطرة (Droplet) قياسية بسعة 8 جيجابايت.

عند محاولة إعادة المعالجة (rebake)، واجهت مشكلة مماثلة مع هذا الموقع على خادم قاعدة بيانات سريع نسبيًا بسعة 16 جيجابايت من الذاكرة، مع خادم ويب منفصل بسعة 16 جيجابايت من الذاكرة أيضًا. كان كلا الخادمين يخدمان بعض المواقع الصغيرة الأخرى ذات الحجم المنخفض.

هل يبدو أن المشكلة ناتجة عن المواضيع العملاقة؟ هل هناك حل غير تقسيمها إلى مواضيع أصغر؟

إن الأمر أسهل بكثير إذا توقفت عن تشغيل عمليات الويب و Sidekiq أثناء إعادة الخريطة، حتى لا يكون هناك أي منافسة على الأقفال.

شكرًا جزيلاً! هذا قد حل المشكلة. وأيضًا، كان الأمر واضحًا جدًا بمجرد أن اقترحت ذلك.

عذرًا على إثارته، لقد واجهنا نفس المشكلة.

كيف يمكن إيقاف عمليات الويب وسيدكي؟

بما أنك تستخدم بيئة تطوير، فما عليك سوى الضغط على Control-C

في Docker، كيف يمكننا إيقافه؟

  sv stop unicorn
  sv stop sidekiq

أليس يونيكورن هو خادم الويب؟