Magento 2 செக்அவுட் வேகம் குறைதல்: Quote அட்டவணையை முடக்கும் காரணி
உங்கள் Magento 2 ஸ்டோரில் ஒரு அமைதியான செயல்திறன் குறைப்பான் (performance killer) உள்ளது. அது உங்கள் தரவுத்தளத்தில் (database) உள்ளது.
ஒவ்வொரு முறை வாடிக்கையாளர் ஒரு பொருளை கார்ட்டில் (cart) சேர்க்கும் போதும், quote மற்றும் quote_item அட்டவணைகள் வளர்கின்றன. அவர்கள் வாங்கவில்லை என்றால் கூட, அந்தத் தரவு அப்படியே இருக்கும். மாதக்கணக்கில், இந்த அட்டவணைகள் மில்லியன் கணக்கான வரிசைகளை (rows) எட்டுகின்றன.
ஒருமுறை நான் 15 மில்லியன் வரிசைகளைக் கொண்ட ஒரு quote அட்டவணையை ஒரு ஸ்டோரில் பார்த்தேன். செக்அவுட் வேகம் 1.2 வினாடிகளிலிருந்து 8 வினாடிகளாகக் குறைந்தது. வணிகருக்கு இது ஏன் நடக்கிறது என்று தெரியவில்லை. முன்பக்கத் தரவுகள் (frontend) கேச் (cached) செய்யப்பட்டிருந்ததால், செக்அவுட் தோல்வியடையும் வரை அனைத்தும் சரியாகத் தெரிந்தன.
பெரிய quote அட்டவணைகள் இந்தத் பிரச்சனைகளை உண்டாக்குகின்றன:
- கனமான database joins காரணமாக கார்ட் பக்கம் மெதுவாகத் திறக்கிறது.
- ஷிப்பிங் மற்றும் மொத்தத் தொகைக்கான (totals) செக்அவுட் AJAX அழைப்புகள் மெதுவாகின்றன.
- அட்மின் ஆர்டர் உருவாக்கம் மெதுவாகிறது.
- தரவுத்தள பேக்கப் மற்றும் மீட்பு (recovery) நேரங்கள் அதிகரிக்கின்றன.
- PHP-FPM-ன் மீதான நினைவக அழுத்தம் (memory pressure) அதிகமாகிறது.
இதை எவ்வாறு சரி செய்வது:
பாதிப்பைக் கணக்கிடுங்கள் உங்கள் வரிசை எண்ணிக்கை (row counts) மற்றும் அட்டவணை அளவுகளைச் சரிபார்க்கவும். stale_inactive எண்ணிக்கையைத் தேடுங்கள். இவை 30 நாட்களுக்கு மேலான கைவிடப்பட்ட கார்ட்டுகள் (abandoned carts). இவை எந்தப் பயன்பாட்டிற்கும் உதவாது, ஆனால் உங்கள் வினவல்களை (queries) மெதுவாக்குகின்றன.
நீக்குவதற்கு முன் ஆவணப்படுத்துங்கள் (Archive) மில்லியன் கணக்கான வரிசைகளை ஒரே நேரத்தில் நீக்க வேண்டாம். இது உங்கள் அட்டவணைகளைப் பூட்டி (lock), தரவுத்தளத்தை முடக்கிவிடும் (crash). முதலில், archive அட்டவணைகளை உருவாக்கி, 90 நாட்களுக்கு மேலான செயலற்ற (inactive) quotes-களை அவற்றில் நகர்த்தவும்.
தொகுக்கப்பட்ட நீக்கங்களைப் (batched deletes) பயன்படுத்துங்கள் 10,000 வரிசைகள் கொண்ட சிறிய தொகுதிகளாக நீக்கவும். இது நீண்ட நேர அட்டவணை பூட்டல்களைத் (table locks) தவிர்க்கும். Foreign key உறவுகளைக் கருத்தில் கொண்டு, எப்போதும் முதலில் child அட்டவணைகளை நீக்கவும். வரிசை முறை இவ்வாறு இருக்க வேண்டும்:
- quote_item_option
- quote_address_item
- quote_shipping_rate
- quote_payment
- quote_address
- quote_item
- quote
மேம்படுத்துதல் மற்றும் குறியீடாக்கம் (Optimize and Index) வட்டு இடத்தைப் (disk space) பெற OPTIMIZE TABLE கட்டளையை இயக்கவும். தரவுத்தளம் செயலில் உள்ள quotes-களை விரைவாகக் கண்டறிய உதவும் வகையில் composite indexes-களைச் சேர்க்கவும். உதாரணமாக, (is_active, updated_at) மீது ஒரு index-ஐச் சேர்க்கவும்.
சுத்திகரிப்பைத் தானியக்கமாக்குங்கள் (Automate) Magento CLI கட்டளையைப் பயன்படுத்தவும்:
bin/magento sales:cleanQuotes. போக்குவரத்து குறைவாக இருக்கும் நேரத்தில் வாராவாரம் இதை இயக்க ஒரு cron job-ஐ அமைக்கவும்.
Pro Tip: விருந்தினர் கார்ட்டுகள் (Guest carts) தான் அதிகப்படியான தரவுச் சுமையை (bloat) உண்டாக்குகின்றன. உங்கள் உள்ளமைப்பில் (configuration) guest quote காலாவதியாகும் நேரத்தை 7 நாட்களாகக் குறைக்கவும். இது உண்மையான வாடிக்கையாளர்களைப் பாதிக்காமல் உங்கள் தரவுத்தளத்தை லேசாக (lean) வைத்திருக்க உதவும்.
இந்த வழிமுறைகளைப் பயன்படுத்திய ஒரு வாடிக்கையாளர், தனது செக்அவுட் லோட் நேரத்தை 6.5 வினாடிகளிலிருந்து 1.4 வினாடிகளாகக் குறைத்ததைக் கண்டார். மேலும், அவர்கள் 9GB தரவுத்தள இடத்தையும் மீட்டெடுத்தனர்.
உங்கள் மாற்ற விகிதங்களை (conversion rates) உயர்வாக வைத்திருக்க, உங்கள் quote அட்டவணைகளைச் சிறியதாக வைத்திருங்கள்.
