Magento 2 చెక్అవుట్ నెమ్మదించడం: Quote టేబుల్ వల్ల కలిగే ప్రమాదం
మీ Magento 2 స్టోర్లో పనితీరును నిశ్శబ్దంగా దెబ్బతీసే ఒక అంశం ఉంది. అది మీ డేటాబేస్లోనే ఉంది.
ప్రతిసారి కస్టమర్ కార్ట్కు ఒక ఉత్పత్తిని జోడించినప్పుడు quote మరియు quote_item టేబుల్స్ పెరుగుతూ ఉంటాయి. వారు కొనుగోలు చేయకపోయినా, ఆ రికార్డు అలాగే ఉంటుంది. నెలలు గడిచేకొద్దీ, ఈ టేబుల్స్లో మిలియన్ల కొద్దీ రోస్ (rows) చేరుతాయి.
ఒకసారి నేను 15 మిలియన్ల రోస్ ఉన్న ఒక quote టేబుల్ను చూశాను. దానివల్ల చెక్అవుట్ వేగం 1.2 సెకన్ల నుండి 8 సెకన్లకు పడిపోయింది. అసలు ఎందుకు ఇలా జరుగుతుందో ఆ మర్చంట్కు తెలియలేదు. ఫ్రంటెండ్ క్యాష్ (cached) చేయబడటం వల్ల, చెక్అవుట్ ఫెయిల్ అయ్యే వరకు అంతా బాగున్నట్టే అనిపించింది.
పెద్ద quote టేబుల్స్ వల్ల ఈ క్రింది సమస్యలు వస్తాయి:
- భారీ డేటాబేస్ జాయిన్స్ (joins) వల్ల కార్ట్ పేజీ లోడ్ అవ్వడం నెమ్మదించడం.
- షిప్పింగ్ మరియు టోటల్స్ కోసం చేసే చెక్అవుట్ AJAX కాల్స్ నెమ్మదించడం.
- అడ్మిన్ ఆర్డర్ క్రియేషన్ నెమ్మదించడం.
- డేటాబేస్ బ్యాకప్ మరియు రికవరీ సమయం పెరగడం.
- PHP-FPM పై మెమరీ ఒత్తిడి పెరగడం.
దీన్ని ఎలా పరిష్కరించాలి:
నష్టాన్ని అంచనా వేయండి మీ రో కౌంట్స్ (row counts) మరియు టేబుల్ సైజులను తనిఖీ చేయండి.
stale_inactiveకౌంట్ను చూడండి. ఇవి 30 రోజుల కంటే పాతవి అయిన అబాండన్డ్ కార్ట్స్ (abandoned carts). ఇవి ఎటువంటి ఉపయోగం లేనివి, కానీ మీ క్వెరీలను (queries) నెమ్మదింపజేస్తాయి.డిలీట్ చేసే ముందు ఆర్కైవ్ చేయండి మిలియన్ల కొద్దీ రోస్ను ఒకేసారి డిలీట్ చేయవద్దు. ఇది మీ టేబుల్స్ను లాక్ చేసి, డేటాబేస్ను క్రాష్ చేస్తుంది. మొదట, ఆర్కైవ్ టేబుల్స్ను సృష్టించి, 90 రోజుల కంటే పాతవి అయిన ఇనాక్టివ్ కోట్స్ (inactive quotes) ను వాటిలోకి తరలించండి.
బ్యాచ్డ్ డిలీట్స్ (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)పై ఇండెక్స్ను జోడించండి.క్లీనప్ను ఆటోమేట్ చేయండి Magento CLI కమాండ్ ఉపయోగించండి:
bin/magento sales:cleanQuotes. ట్రాఫిక్ తక్కువగా ఉన్న సమయంలో ప్రతి వారం ఇది రన్ అయ్యేలా ఒక క్రోన్ జాబ్ (cron job) సెటప్ చేయండి.
ప్రో టిప్ (Pro Tip): గెస్ట్ కార్ట్స్ (Guest carts) వల్లనే డేటా ఎక్కువగా పెరుగుతుంది. మీ కాన్ఫిగరేషన్లో గెస్ట్ కోట్ లైఫ్టైమ్ను 7 రోజులకు తగ్గించండి. ఇది నిజమైన కస్టమర్లకు ఇబ్బంది లేకుండా మీ డేటాబేస్ను తేలికగా ఉంచుతుంది.
ఈ దశలను ఉపయోగించడం ద్వారా ఒక క్లయింట్ తమ చెక్అవుట్ లోడ్ సమయాన్ని 6.5s నుండి 1.4s కి తగ్గించుకున్నారు. వారు 9GB డేటాబేస్ స్పేస్ను కూడా తిరిగి పొందారు.
మీ కన్వర్షన్ రేట్లు (conversion rates) ఎక్కువగా ఉండాలంటే, మీ quote టేబుల్స్ను చిన్నవిగా ఉంచుకోండి.
