Magento 2 चेकआउटचा वेग मंदावणे: 'Quote Table' मुळे येणारा अडथळा
तुमच्या Magento 2 स्टोअरमध्ये एक छुपा परफॉर्मन्स किलर (performance killer) आहे. तो तुमच्या डेटाबेसमध्ये असतो.
जेव्हा जेव्हा एखादा ग्राहक कार्टमध्ये उत्पादन (product) जोडतो, तेव्हा quote आणि quote_item टेबल्सची संख्या वाढते. जर त्यांनी खरेदी केली नाही, तरीही तो रेकॉर्ड तिथेच राहतो. काही महिन्यांत, या टेबल्समध्ये लाखो रांगा (rows) जमा होतात.
मी एकदा असे एक स्टोअर पाहिले ज्याच्या quote टेबलमध्ये १५ दशलक्ष (15 million) रांगा होत्या. चेकआउटचा वेग १.२ सेकंदांवरून ८ सेकंदांपर्यंत खाली आला होता. व्यापाऱ्याला याचे कारण माहित नव्हते. फ्रंटएंड कॅश (cached) असल्यामुळे, जोपर्यंत चेकआउट फेल होत नाही तोपर्यंत सर्व काही व्यवस्थित दिसत होते.
मोठ्या quote टेबल्समुळे खालील समस्या उद्भवतात:
- डेटाबेस जॉइन्स (database joins) जड झाल्यामुळे कार्ट पेज लोड होण्यास उशीर होतो.
- शिपिंग आणि एकूण रकमेसाठी (totals) होणाऱ्या चेकआउट AJAX कॉल्सचा वेग मंदावतो.
- ॲडमिन पॅनेलमध्ये ऑर्डर तयार करण्याचा वेग कमी होतो.
- डेटाबेस बॅकअप आणि रिकव्हरीसाठी जास्त वेळ लागतो.
- PHP-FPM वर मेमरीचा ताण वाढतो.
हे कसे सुधारावे:
नुकसानीचे मोजमाप करा तुमच्या रांगांची संख्या (row counts) आणि टेबल्सचा आकार तपासा.
stale_inactiveसंख्या तपासा. हे ३० दिवसांपेक्षा जुने सोडून दिलेले (abandoned) कार्ट्स आहेत. त्यांचा कोणताही उपयोग नसतो, पण ते तुमच्या क्वेरीजचा (queries) वेग कमी करतात.डिलीट करण्यापूर्वी आर्काइव्ह (Archive) करा लाखो रांगा एकाच वेळी डिलीट करू नका. यामुळे तुमचे टेबल्स लॉक होतील आणि तुमचा डेटाबेस क्रॅश होऊ शकतो. प्रथम, आर्काइव्ह टेबल्स तयार करा आणि ९० दिवसांपेक्षा जुने निष्क्रिय (inactive) कोट्स त्यामध्ये हलवा.
बॅच डिलीट्सचा (batched deletes) वापर करा १०,००० च्या लहान तुकड्यांमध्ये (chunks) रांगा डिलीट करा. यामुळे टेबल्स दीर्घकाळ लॉक होण्यापासून वाचते. फॉरेन की रिलेशनशिप्सचा (foreign key relationships) आदर करण्यासाठी नेहमी प्रथम चाइल्ड टेबल्स डिलीट करा. क्रम असा असावा:
quote_item_optionquote_address_itemquote_shipping_ratequote_paymentquote_addressquote_itemquote
ऑप्टिमाइझ आणि इंडेक्स करा डिस्क स्पेस परत मिळवण्यासाठी
OPTIMIZE TABLEचालवा. डेटाबेसने सक्रिय कोट्स वेगाने शोधण्यास मदत करण्यासाठी 'कम्पोझिट इंडेक्स' (composite indexes) जोडा. उदाहरणार्थ,(is_active, updated_at)वर इंडेक्स जोडा.क्लिनअप ऑटोमेट करा Magento CLI कमांड वापरा:
bin/magento sales:cleanQuotes. कमी ट्रॅफिकच्या वेळी दर आठवड्याला हे चालवण्यासाठी 'क्रॉन जॉब' (cron job) सेट करा.
प्रो टिप (Pro Tip): गेस्ट कार्ट्समुळे (Guest carts) सर्वात जास्त वाढ होते. तुमच्या कॉन्फिगरेशनमध्ये गेस्ट कोट लाइफटाइम ७ दिवसांपर्यंत कमी करा. यामुळे खऱ्या ग्राहकांना त्रास न देता तुमचा डेटाबेस हलका (lean) राहील.
या स्टेप्स वापरून एका क्लायंटचा चेकआउट लोड होण्याचा वेळ ६.५ सेकंदांवरून १.४ सेकंदांपर्यंत कमी झाला. त्यांनी ९ GB डेटाबेस स्पेस देखील रिकव्हर केली.
तुमचे कन्वर्जन रेट्स (conversion rates) उच्च ठेवण्यासाठी तुमचे कोट टेबल्स लहान ठेवा.
