Magento 2 چیک آؤٹ کی سست رفتاری: کوٹ ٹیبل کا قاتل
آپ کے Magento 2 اسٹور میں کارکردگی کو خاموشی سے متاثر کرنے والا ایک عنصر موجود ہے۔ یہ آپ کے ڈیٹا بیس میں رہتا ہے۔
جب بھی کوئی صارف کارٹ میں کوئی پروڈکٹ شامل کرتا ہے، تو quote اور quote_item ٹیبلز کا سائز بڑھ جاتا ہے۔ اگر وہ خریداری نہیں کرتے، تب بھی ریکارڈ موجود رہتا ہے۔ مہینوں کے دوران، یہ ٹیبلز لاکھوں روز (rows) تک پہنچ جاتے ہیں۔
میں نے ایک بار ایک ایسا اسٹور دیکھا جس کے quote ٹیبل میں 15 ملین روز تھے۔ چیک آؤٹ کی رفتار 1.2 سیکنڈ سے کم ہو کر 8 سیکنڈ ہو گئی تھی۔ تاجر کو اندازہ ہی نہیں تھا کہ ایسا کیوں ہو رہا ہے۔ فرنٹ اینڈ کیش (cached) تھا، اس لیے جب تک چیک آؤٹ فیل نہیں ہوا، سب کچھ ٹھیک نظر آ رہا تھا۔
بڑے کوٹ ٹیبلز ان مسائل کا باعث بنتے ہیں:
- بھاری ڈیٹا بیس جوائنز (joins) کی وجہ سے کارٹ پیج کے لوڈ ہونے میں تاخیر۔
- شپنگ اور ٹوٹل کے لیے سلو چیک آؤٹ AJAX کالز۔
- ایڈمن میں آرڈر بنانے کی سست رفتار۔
- ڈیٹا بیس بیک اپ اور ریکوری میں زیادہ وقت۔
- PHP-FPM پر میموری کا زیادہ دباؤ۔
اسے کیسے ٹھیک کریں:
نقصان کا اندازہ لگائیں اپنے روز کاؤنٹ (row counts) اور ٹیبل کے سائز چیک کریں۔
stale_inactiveکی تعداد دیکھیں۔ یہ وہ کارٹس ہیں جو 30 دن سے زیادہ پرانے اور متروکہ (abandoned) ہیں۔ ان کا کوئی فائدہ نہیں ہوتا سوائے اس کے کہ یہ آپ کی کوئریز (queries) کو سست کر دیتے ہیں۔ڈیلیٹ کرنے سے پہلے آرکائیو کریں لاکھوں روز کو ایک ساتھ ڈیلیٹ نہ کریں۔ اس سے آپ کے ٹیبلز لاک ہو جائیں گے اور آپ کا ڈیٹا بیس کریش ہو سکتا ہے۔ پہلے آرکائیو ٹیبلز بنائیں اور 90 دن سے زیادہ پرانے غیر فعال (inactive) کوٹس کو ان میں منتقل کر دیں۔
بیچڈ ڈیلیٹس (batched deletes) کا استعمال کریں روز کو 10,000 کے چھوٹے حصوں (chunks) میں ڈیلیٹ کریں۔ یہ ٹیبل لاک ہونے کے طویل دورانیے کو روکتا ہے۔ فارن کی (foreign key) تعلقات کو برقرار رکھنے کے لیے ہمیشہ پہلے چائلڈ ٹیبلز ڈیلیٹ کریں۔ ترتیب یہ ہونی چاہیے:
quote_item_optionquote_address_itemquote_shipping_ratequote_paymentquote_addressquote_itemquote
آپٹیمائز اور انڈیکس کریں ڈسک سپیس کو بحال کرنے کے لیے
OPTIMIZE TABLEچلائیں۔ ڈیٹا بیس کو فعال کوٹس تیزی سے تلاش کرنے میں مدد دینے کے لیے کمپوزٹ انڈیکس (composite indexes) شامل کریں۔ مثال کے طور پر،(is_active, updated_at)پر ایک انڈیکس شامل کریں۔صفائی کے عمل کو خودکار (automate) بنائیں Magento CLI کمانڈ استعمال کریں:
bin/magento sales:cleanQuotes۔ کم ٹریفک کے دوران اسے ہفتہ وار چلانے کے لیے کرون جاب (cron job) سیٹ اپ کریں۔
پرو ٹپ: گیسٹ کارٹس (Guest carts) سب سے زیادہ بوجھ ڈالتے ہیں۔ اپنی کنفیگریشن میں گیسٹ کوٹ کی مدت (lifetime) کو کم کر کے 7 دن کر دیں۔ اس سے آپ کے اصل صارفین کو متاثر کیے بغیر آپ کا ڈیٹا بیس ہلکا پھلکا رہے گا۔
ایک کلائنٹ نے ان اقدامات کو استعمال کرتے ہوئے اپنے چیک آؤٹ لوڈ ہونے کے وقت کو 6.5s سے کم کر کے 1.4s کر لیا۔ انہوں نے ڈیٹا بیس کی 9GB جگہ بھی بحال کی۔
اپنے کنورژن ریٹس (conversion rates) کو زیادہ رکھنے کے لیے اپنے کوٹ ٹیبلز کو چھوٹا رکھیں۔
