من أكثر التحديات التي تواجه أصحاب المتاجر الإلكترونية هي مشاكل المخزون في ماجنتو، مثل نفاد المنتج رغم توفر الكمية أو ظهور كميات سالبة.
هذه الأخطاء لا تنتج عن السيرفر أو الإضافات الأخرى، بل غالبًا بسبب موديولات MSI (Multi-Source Inventory) التي أضيفت لإدارة مستودعات متعددة -مثلاً مستودع في الرياض، مستودع في جدة، مستودع في مكة).
لكن… ماذا لو كان لديك مستودع واحد فقط مثل أكثر من 80٪ من المتاجر في الخليج؟
في هذه الحالة تصبح موديولات MSI عبئًا بلا فائدة وتؤدي إلى استعلامات ثقيلة ومشاكل مستمرة.
التحديات التي واجهناها قبل العمل
مؤشر قياس المشكلة | القيمة الفعلية قبل الحل |
---|---|
فهرسة «inventory_stock» | 6 دقائق لكل دورة فهرسة |
استعلام JOIN على inventory_stock_1 | +900 ms تأخير في تحميل صفحات التصنيفات |
شكاوى «نفاد المنتج رغم وجود الكمية» | 3–5 عملاء يشتكون يومياً |
مشاكل البيع الزائد رغم نفاذ الكمية أثناء التخفيضات | 12 طلبًا خلال أسبوع قبل حل المشكلة |
الحل الجذري: حذف موديولات MSI ثم ضبط المخزون الأحادي
1. حذف موديولات MSI في ماجنتو
من أجل إزالة موديولات MSI بشكل صحيح وبدون التأثير على المتجر، كانت أسرع طريقة لفعل ذلك عبر استخدام Composer replace، باستخدام package اسمها Yireo/Magento2-replace.
وها هي الأوامر التي تم تنفيذها من أجل الإزالة:
composer require yireo/magento2-replace-inventory:^4
php bin/magento setup:upgrade
php bin/magento setup:di:compile
حزمة yireo/magento2-replace-inventory تستبدل 43 موديولًا (inventory-*) وتحذفها كلياً من مجلد الvendor.
ملاحظة: احتفِظ بنسخة من قواعد البيانات DB قبل تنفيذ الأوامر، ثم فعِّل «Manage Stock» القديم (catalog inventory).
2. تنظيف الحجوزات قبل الإزالة واستبدال الموديولات
ويتم ذلك من خلال معرفة قائمة الحجوزات الموجودة حالياً ومن ثم تفريغها باستخدام الأوامر التالية:
bin/magento inventory:reservation:list-inconsistencies
bin/magento inventory:reservation:clean
3. إعادة تفعيل فهرس «stock_status» الافتراضي
بعد التعطيل، فعِل فقط Indexer cataloginventory_stock
وضعه On Schedule لتجنّب التعارضات.
النتيجة النهائية بالأرقام
مؤشر القياس | قبل (MSI مفعَّل) | بعد الحذف |
---|---|---|
زمن فهرسة المخزون | 6 دقائق | 3 دقائق 18 ث (-45 ٪) |
LCP صفحة الفئة | 3.2 ث | 2.4 ث (-25 ٪) |
استعلامات سالبة الكمية /يوم | 130 | < 5 |
شكاوي «نفاد الكمية» | 3–5/يوم | 0–1/يوم |
لماذا يجب حذف موديولات MSI في حال كان لديك مستودع واحد فقط؟
- أداء أسرع
- SQL JOIN على
inventory_stock_1
مسؤول عن تأخير يصل إلى 0.9 ثانية في كل طلب تحميل صفحة تصنيف.
- SQL JOIN على
- المخزون بشكل سليم
- الحجوزات الغير مفرغة تترك Salable Qty بالسالب، وحذف الموديولات يُعيد الحساب إلى المخزون الأساسي بشكل سليم.
- فهرسة أخف
- يتقلّص عدد Indexers من 13 إلى 7، مما يقلّل زمن الفهرسة والتعارضات بين الفهارس المتعلقة بالمخزونة.
- أمان وصيانة
- أقل من ثُلث الباتشات الأمنيّة الشهريّة في ماجنتو تخص موديولات المخزون Inventory، بالتالي فإن حذفها يقلل من الحاجة للتحديث المستمرة وحالات الصيانة الطارئة لماجنتو.
أكثر مشاكل المخزون شيوعًا وحلولها السريعة
المشكلة | السبب المعتاد | الحل وفائدته باختصار |
---|---|---|
Salable Qty بالسالب | حجوزات MSI غير مفرغة بعد إلغاء الطلب | نفذ أمر reservation:clean ثم حذف MSI أو باستخدام باتش Patch MDVA-30112 |
منتجات “متاحة“ بدون كمية | فهرس cataloginventory_stock_status لا يُحدث بعد الحفظ | أعد الفهرسة باستخدام index:reindex، واحذف MSI إذا كان لديك مستودع واحد. |
بطء حفظ المنتج في لوحة ماجنتو | عمليات التحقق من الجداول inventory_source_item لكل حقل تابع للمخزون -الكميات- | حذف موديولات MSI يخفض استدعاءات isTableExists البطيئة. |
طلبات كثيرة على الـ Cron job | مهام inventory_reservation_cloner وexport_stock | إلغاء جدولة مهام MSI بعد التعطيل أو تخفيض تكرارها. |
خطوات قابلة للتطبيق في متجرك
- قيم احتياجاتك الفعلية: إذا كنت تمتلك مستودع واحد، فموديولات MSI غالبًا تضيف الكثير من التعقيدات على المخزونة بدون أي فائدة تذكر لك!
- احذف موديولات MSI: باستخدام أوامر composer replace التي تم شرحها في هذه الدراسة.
- نظّف الحجوزات: قبل حذف موديولات MSI تأكيد من تنظيف الحجوزات لضمان دقة المخزون الأساسي.
- ارصد الأداء بشكل أسبوعي خلال الشهر الأول: تأكد من وجود انخفاض ملحوظ في إستهلاك الـ CPU وأن عملية الفهرسة أصبحت أسرع.
الأسئلة الشائعة عن مشاكل المخزون في ماجنتو
ما هو سبب ظهور Salable Qty بالسالب في ماجنتو؟
السبب الرئيسي هو موديولات MSI التي تُنشئ حجوزات غير مفرغة بعد إلغاء الطلبات، ما يؤدي إلى أرقام سالبة في الكميات.
هل حذف موديولات MSI يؤثر على متجر متعدد المستودعات؟
نعم، إذا كان لديك أكثر من مستودع لا يجب حذفها. الحل مناسب فقط للمتاجر ذات المستودع الواحد.
كيف يؤثر حذف MSI على أداء الفهرسة؟
إزالة الموديولات تقلل عدد الـ Indexers من 13 إلى 7، مما يسرّع الفهرسة ويخفف الضغط على السيرفر.
هل يمكن حل مشاكل المخزون بترقية السيرفر؟
لا، الترقية تزيد التكلفة فقط دون معالجة السبب الجذري وهو الاستعلامات الثقيلة الناتجة عن MSI.
كيف أعرف إن كانت مشاكل المخزون لدي بسبب MSI؟
إذا كان لديك مستودع واحد وتواجه بطء في الفهرسة أو كميات سالبة أو شكاوى من نفاذ الكمية رغم توفرها، فغالبًا السبب هو MSI.
الملخص
مشاكل المخزون في Magento 2 لا يتم معالجتها بترقية السيرفر فقط، بل يتم ذلك بإزالة التعقيدات والموديولات الغير ضرورية، وأهمها حذف موديولات MSI من أجل تحسين سرعة الفهرسة 45 ٪، وتخفيض أخطاء الكمية السالبة، وتقليل شكاوى العملاء.
هل تعاني من مشاكل المخزون في متجر ماجنتو الخاص بك؟
وهل ترغب في متجر يعمل بلا مشاكل تقنية؟
اشترك الآن في خدمات الدعم الفني والصيانة التي نقدمها لمُلاك المتاجر الإلكتروني. [تصفح باقات الدعم الفني والصيانة]