Magento 2 चेकआउट में सुस्ती: Quote Table का कहर

आपके Magento 2 स्टोर में प्रदर्शन को चुपचाप खराब करने वाला एक कारक है। यह आपके डेटाबेस में रहता है।

जब भी कोई ग्राहक कार्ट में कोई उत्पाद जोड़ता है, तो quote और quote_item टेबल बढ़ जाते हैं। यदि वे खरीदारी नहीं करते हैं, तो भी वह रिकॉर्ड बना रहता है। महीनों के दौरान, ये टेबल लाखों पंक्तियों (rows) तक पहुँच जाते हैं।

मैंने एक बार एक ऐसा स्टोर देखा जिसमें quote टेबल में 1.5 करोड़ (15 million) पंक्तियाँ थीं। चेकआउट की गति 1.2 सेकंड से घटकर 8 सेकंड हो गई थी। मर्चेंट को पता ही नहीं था कि ऐसा क्यों हो रहा है। फ्रंटएंड कैश (cached) था, इसलिए चेकआउट फेल होने तक सब कुछ ठीक लग रहा था।

बड़ी quote टेबल्स से ये समस्याएँ होती हैं:

  • भारी डेटाबेस जॉइन्स (joins) के कारण कार्ट पेज लोड होने में देरी।
  • शिपिंग और टोटल के लिए स्लो चेकआउट AJAX कॉल्स।
  • एडमिन ऑर्डर क्रिएशन में अधिक समय लगना।
  • डेटाबेस बैकअप और रिकवरी में अधिक समय लगना।
  • PHP-FPM पर अधिक मेमोरी प्रेशर।

इसे कैसे ठीक करें:

  1. नुकसान का आकलन करें अपनी रो काउंट (row counts) और टेबल साइज की जाँच करें। stale_inactive काउंट देखें। ये 30 दिनों से पुराने छोड़े गए कार्ट (abandoned carts) हैं। इनका कोई उपयोग नहीं है, लेकिन ये आपकी क्वेरीज़ को धीमा कर देते हैं।

  2. डिलीट करने से पहले आर्काइव करें लाखों पंक्तियों को एक साथ डिलीट न करें। इससे आपकी टेबल्स लॉक हो जाएँगी और आपका डेटाबेस क्रैश हो सकता है। सबसे पहले, आर्काइव टेबल्स बनाएँ और 90 दिनों से पुराने निष्क्रिय (inactive) कोट्स को उनमें मूव कर दें।

  3. बैच डिलीट (batched deletes) का उपयोग करें पंक्तियों को 10,000 के छोटे टुकड़ों (chunks) में डिलीट करें। यह लंबे टेबल लॉक को रोकता है। फॉरेन की (foreign key) संबंधों का सम्मान करने के लिए हमेशा पहले चाइल्ड टेबल्स को डिलीट करें। क्रम यह होना चाहिए:

  • quote_item_option
  • quote_address_item
  • quote_shipping_rate
  • quote_payment
  • quote_address
  • quote_item
  • quote
  1. ऑप्टिमाइज़ और इंडेक्स करें डिस्क स्पेस वापस पाने के लिए OPTIMIZE TABLE चलाएँ। डेटाबेस को सक्रिय कोट्स जल्दी खोजने में मदद करने के लिए कंपोजिट इंडेक्स (composite indexes) जोड़ें। उदाहरण के लिए, (is_active, updated_at) पर एक इंडेक्स जोड़ें।

  2. सफाई को ऑटोमेट करें Magento CLI कमांड का उपयोग करें: bin/magento sales:cleanQuotes। कम ट्रैफिक के दौरान इसे साप्ताहिक रूप से चलाने के लिए एक cron job सेट करें।

प्रो टिप: गेस्ट कार्ट (Guest carts) सबसे अधिक बोझ बढ़ाते हैं। अपने कॉन्फ़िगरेशन में गेस्ट कोट की लाइफटाइम को घटाकर 7 दिन कर दें। इससे वास्तविक ग्राहकों को नुकसान पहुँचाए बिना आपका डेटाबेस हल्का बना रहता है।

इन चरणों का उपयोग करके एक क्लाइंट ने अपने चेकआउट लोड समय को 6.5s से घटाकर 1.4s कर लिया। उन्होंने 9GB डेटाबेस स्पेस भी वापस पा लिया।

अपने कन्वर्जन रेट को उच्च बनाए रखने के लिए अपनी quote टेबल्स को छोटा रखें।

Source: https://dev.to/magevanta/magento-2-quote-table-optimization-scaling-checkout-with-millions-of-abandoned-carts-4pmp