Kupungua kwa Kasi ya Malipo (Checkout) kwenye Magento 2: Mharibifu wa Jedwali la Quote

Duka lako la Magento 2 lina mharibifu wa utendaji usiyeonekana. Anaishi kwenye kanzi data yako.

Majedwali ya quote na quote_item hukua kila wakati mteja anapoongeza bidhaa kwenye kikapu. Ikiwa hawanunui, rekodi hiyo hubaki. Kwa miezi kadhaa, majedwali haya hufikia mamilioni ya mistari.

Niliona duka moja lenye mistari milioni 15 kwenye jedwali la quote. Kasi ya malipo (checkout) ilishuka kutoka sekunde 1.2 hadi sekunde 8. Muuzaji hakuwa na wazo la kwa nini. Upande wa mbele (frontend) ulikuwa umewekwa kwenye cache, hivyo kila kitu kilionekana sawa hadi malipo yalipofeli.

Majedwali makubwa ya quote husababisha matatizo haya:

  • Upakiaji wa polepole wa ukurasa wa kikapu kutokana na muunganiko mzito wa kanzi data (database joins).
  • Simu za AJAX za malipo (checkout) kuwa polepole kwa ajili ya usafirishaji na jumla ya gharama.
  • Uundaji wa oda kwenye sehemu ya admin kuwa wa polepole zaidi.
  • Muda mrefu wa nakala ya akiba (backup) na urejesho wa kanzi data.
  • Shinikizo kubwa la kumbukumbu (memory pressure) kwenye PHP-FPM.

Jinsi ya kurekebisha:

  1. Pima uharibifu Angalia idadi ya mistari na ukubwa wa majedwali yako. Angalia idadi ya stale_inactive. Haya ni vikapu vilivyoachwa vilivyo na umri wa zaidi ya siku 30. Hayana kazi yoyote isipokuwa kupunguza kasi ya maswali yako (queries).

  2. Hifadhi (Archive) kabla ya kufuta Usifute mamilioni ya mistari kwa mkupuo mmoja. Hii itafunga majedwali yako na kusababisha kanzi data yako isifanye kazi. Kwanza, tengeneza majedwali ya hifadhi (archive tables) na uhamishishe quote zisizofanya kazi zenye umri wa zaidi ya siku 90 kwenda humo.

  3. Tumia ufutaji wa makundi (batched deletes) Futa mistari katika vipande vidogo vya 10,000. Hii inazuia kufungwa kwa majedwali kwa muda mrefu. Daima futa majedwali ya watoto (child tables) kwanza ili kuheshimu uhusiano wa funguo za kigeni (foreign key relationships). Mpangilio unapaswa kuwa:

  • quote_item_option
  • quote_address_item
  • quote_shipping_rate
  • quote_payment
  • quote_address
  • quote_item
  • quote
  1. Sanifu (Optimize) na weka Viashiria (Index) Run OPTIMIZE TABLE ili kurejesha nafasi ya diski. Ongeza viashiria mchanganyiko (composite indexes) ili kusaidia kanzi data kupata quote zinazofanya kazi kwa haraka zaidi. Kwa mfano, ongeza index kwenye (is_active, updated_at).

  2. Rasimisha usafishaji Tumia amri ya Magento CLI: bin/magento sales:cleanQuotes. Sanidi kazi ya cron (cron job) ili kuendesha hii kila wiki wakati wa trafiki ndogo.

Kidokezo cha Kitaalamu: Vikapu vya wageni (guest carts) ndivyo vinavyosababisha ukubwa mkubwa zaidi. Punguza muda wa maisha ya guest quote hadi siku 7 kwenye mipangilio yako. Hii inafanya kanzi data yako iwe nyepesi bila kuwadhuru wateja halisi.

Mteja mmoja aliona muda wake wa upakiaji wa malipo ukishuka kutoka sekunde 6.5 hadi sekunde 1.4 kwa kutumia hatua hizi. Pia walipata tena nafasi ya 9GB kwenye kanzi data.

Weka majedwali yako ya quote kuwa madogo ili kuweka viwango vyako vya ubadilishaji (conversion rates) kuwa juu.

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