Magento 2 ચેકઆઉટ સ્લોડાઉન: ક્વોટ ટેબલનો વિલંબ
તમારા Magento 2 સ્ટોરમાં એક છૂપો પરફોર્મન્સ કિલર છે. તે તમારા ડેટાબેઝમાં રહેલો છે.
જ્યારે પણ કોઈ ગ્રાહક કાર્ટમાં પ્રોડક્ટ ઉમેરે છે, ત્યારે quote અને quote_item ટેબલ્સ વધતા જાય છે. જો તેઓ ખરીદી ન કરે, તો પણ તે રેકોર્ડ ત્યાં જ રહે છે. મહિનાઓ પછી, આ ટેબલ્સમાં લાખો (millions) રોઝ (rows) થઈ જાય છે.
મેં એકવાર એક એવો સ્ટોર જોયો હતો જેમાં quote ટેબલમાં 1.5 કરોડ (15 million) રોઝ હતા. ચેકઆઉટની ઝડપ 1.2 સેકન્ડથી ઘટીને 8 સેકન્ડ થઈ ગઈ હતી. વેપારીને ખબર જ નહોતી કે આવું કેમ થઈ રહ્યું છે. ફ્રન્ટએન્ડ કેશ (cached) થયેલું હતું, તેથી જ્યાં સુધી ચેકઆઉટ ફેલ ન થાય ત્યાં સુધી બધું બરાબર દેખાતું હતું.
મોટા ક્વોટ ટેબલ્સ આ સમસ્યાઓ પેદા કરે છે:
- હેવી ડેટાબેઝ જોઇન્સ (database joins) ને કારણે કાર્ટ પેજ લોડ થવામાં ધીમું પડે છે.
- શિપિંગ અને ટોટલ્સ માટેના સ્લો ચેકઆઉટ AJAX કોલ્સ.
- એડમિન ઓર્ડર બનાવવામાં વધુ સમય લાગે છે.
- ડેટાબેઝ બેકઅપ અને રિકવરીમાં વધુ સમય લાગે છે.
- PHP-FPM પર વધુ મેમરી પ્રેશર.
તેને કેવી રીતે ઠીક કરવું:
નુકસાનનું માપન કરો તમારા રો કાઉન્ટ (row counts) અને ટેબલ સાઈઝ તપાસો.
stale_inactiveકાઉન્ટ જુઓ. આ 30 દિવસથી જૂના છોડેલા (abandoned) કાર્ટ્સ છે. તેમનો કોઈ ઉપયોગ નથી પરંતુ તેઓ તમારી ક્વેરીઝને ધીમી પાડે છે.ડિલીટ કરતા પહેલા આર્કાઇવ કરો લાખો રોઝને એકસાથે ડિલીટ કરશો નહીં. આનાથી તમારા ટેબલ્સ લોક થઈ જશે અને તમારો ડેટાબેઝ ક્રેશ થઈ શકે છે. પહેલા, આર્કાઇવ ટેબલ્સ બનાવો અને 90 દિવસથી જૂના ઇનએક્ટિવ ક્વોટ્સને તેમાં ખસેડો.
બેચમાં ડિલીટ (batched deletes) નો ઉપયોગ કરો 10,000 ના નાના ટુકડાઓમાં (chunks) રોઝ ડિલીટ કરો. આ લાંબા ટેબલ લોક્સને અટકાવે છે. ફોરેન કી (foreign key) સંબંધો જાળવી રાખવા માટે હંમેશા પહેલા ચાઇલ્ડ ટેબલ્સ ડિલીટ કરો. ક્રમ આ મુજબ હોવો જોઈએ:
- quote_item_option
- quote_address_item
- quote_shipping_rate
- quote_payment
- quote_address
- quote_item
- quote
ઓપ્ટિમાઇઝ અને ઇન્ડેક્સ કરો ડિસ્ક સ્પેસ પાછી મેળવવા માટે
OPTIMIZE TABLEરન કરો. ડેટાબેઝને એક્ટિવ ક્વોટ્સ ઝડપથી શોધવામાં મદદ કરવા માટે કોમ્પોઝિટ ઇન્ડેક્સ (composite indexes) ઉમેરો. ઉદાહરણ તરીકે,(is_active, updated_at)પર ઇન્ડેક્સ ઉમેરો.ક્લીનઅપ ઓટોમેટ કરો Magento CLI કમાન્ડનો ઉપયોગ કરો:
bin/magento sales:cleanQuotes. ઓછા ટ્રાફિક દરમિયાન આ દર અઠવાડિયે ચલાવવા માટે ક્રોન જોબ (cron job) સેટ કરો.
Pro Tip: ગેસ્ટ કાર્ટ્સ સૌથી વધુ વધારો (bloat) કરે છે. તમારા કોન્ફિગરેશનમાં ગેસ્ટ ક્વોટ લાઈફટાઈમ ઘટાડીને 7 દિવસ કરો. આનાથી વાસ્તવિક ગ્રાહકોને નુકસાન પહોંચાડ્યા વિના તમારો ડેટાબેઝ સ્લીમ રહેશે.
એક ક્લાયન્ટે આ સ્ટેપ્સનો ઉપયોગ કરીને તેમના ચેકઆઉટ લોડ ટાઈમને 6.5s થી ઘટાડીને 1.4s કરી દીધો. તેમણે 9GB ડેટાબેઝ સ્પેસ પણ પાછી મેળવી.
તમારા કન્વર્ઝન રેટ ઊંચા રાખવા માટે તમારા ક્વોટ ટેબલ્સને નાના રાખો.
