Magento 2 ਚੈੱਕਆਊਟ ਦੀ ਸੁਸਤੀ: Quote Table Killer

ਤੁਹਾਡੇ Magento 2 ਸਟੋਰ ਵਿੱਚ ਇੱਕ ਚੁੱਪ ਰਹਿ ਕੇ ਪਰਫਾਰਮੈਂਸ ਖਰਾਬ ਕਰਨ ਵਾਲੀ ਚੀਜ਼ ਹੈ। ਇਹ ਤੁਹਾਡੇ ਡੇਟਾਬੇਸ ਵਿੱਚ ਹੈ।

ਹਰ ਵਾਰ ਜਦੋਂ ਕੋਈ ਗਾਹਕ ਕਾਰਟ ਵਿੱਚ ਕੋਈ ਉਤਪਾਦ ਜੋੜਦਾ ਹੈ, ਤਾਂ quote ਅਤੇ quote_item ਟੇਬਲ ਵਧਦੇ ਜਾਂਦੇ ਹਨ। ਜੇਕਰ ਉਹ ਖਰੀਦਦੇ ਨਹੀਂ ਹਨ, ਤਾਂ ਵੀ ਉਹ ਰਿਕਾਰਡ ਉੱਥੇ ਹੀ ਰਹਿੰਦਾ ਹੈ। ਮਹੀਨਿਆਂ ਦੇ ਅੰਦਰ, ਇਹ ਟੇਬਲ ਮਿਲੀਅਨ ਰੋਅਜ਼ (millions of rows) ਤੱਕ ਪਹੁੰਚ ਜਾਂਦੇ ਹਨ।

ਮੈਂ ਇੱਕ ਵਾਰ ਇੱਕ ਅਜਿਹਾ ਸਟੋਰ ਦੇਖਿਆ ਜਿਸਦੀ quote ਟੇਬਲ ਵਿੱਚ 15 ਮਿਲੀਅਨ ਰੋਅਜ਼ ਸਨ। ਚੈੱਕਆਊਟ ਦੀ ਰਫ਼ਤਾਰ 1.2 ਸਕਿੰਟ ਤੋਂ ਘਟ ਕੇ 8 ਸਕਿੰਟ ਹੋ ਗਈ ਸੀ। ਵਪਾਰੀ ਨੂੰ ਇਸਦਾ ਕੋਈ ਅੰਦਾਜ਼ਾ ਨਹੀਂ ਸੀ ਕਿ ਅਜਿਹਾ ਕਿਉਂ ਹੋ ਰਿਹਾ ਹੈ। ਫਰੰਟਐਂਡ ਕੈਸ਼ (cached) ਸੀ, ਇਸ ਲਈ ਚੈੱਕਆਊਟ ਫੇਲ ਹੋਣ ਤੱਕ ਸਭ ਕੁਝ ਠੀਕ ਲੱਗ ਰਿਹਾ ਸੀ।

ਵੱਡੀਆਂ quote ਟੇਬਲਾਂ ਕਾਰਨ ਇਹ ਸਮੱਸਿਆਵਾਂ ਆ ਸਕਦੀਆਂ ਹਨ:

  • ਭਾਰੀ ਡੇਟਾਬੇਸ ਜੁਆਇੰਸ (joins) ਕਾਰਨ ਕਾਰਟ ਪੇਜ ਦੇ ਲੋਡ ਹੋਣ ਵਿੱਚ ਦੇਰੀ।
  • ਸ਼ਿਪਿੰਗ ਅਤੇ ਟੋਟਲ ਲਈ ਚੈੱਕਆਊਟ AJAX ਕਾਲਜ਼ ਦੀ ਸੁਸਤੀ।
  • ਐਡਮਿਨ ਆਰਡਰ ਬਣਾਉਣ ਦੀ ਪ੍ਰਕਿਰਿਆ ਦਾ ਹੌਲੀ ਹੋਣਾ।
  • ਡੇਟਾਬੇਸ ਬੈਕਅੱਪ ਅਤੇ ਰਿਕਵਰੀ ਵਿੱਚ ਜ਼ਿਆਦਾ ਸਮਾਂ ਲੱਗਣਾ।
  • PHP-FPM 'ਤੇ ਮੈਮੋਰੀ ਦਾ ਵਧੇਰੇ ਦਬਾਅ।

ਇਸਨੂੰ ਕਿਵੇਂ ਠੀਕ ਕਰੀਏ:

  1. ਨੁਕਸਾਨ ਦਾ ਅੰਦਾਜ਼ਾ ਲਗਾਓ ਆਪਣੇ ਰੋਅਜ਼ ਕਾਊਂਟ (row counts) ਅਤੇ ਟੇਬਲ ਦੇ ਸਾਈਜ਼ ਦੀ ਜਾਂਚ ਕਰੋ। stale_inactive ਕਾਊਂਟ ਦੇਖੋ। ਇਹ 30 ਦਿਨਾਂ ਤੋਂ ਪੁਰਾਣੇ ਛੱਡੇ ਹੋਏ (abandoned) ਕਾਰਟ ਹਨ। ਇਹਨਾਂ ਦਾ ਕੋਈ ਫਾਇਦਾ ਨਹੀਂ ਹੈ, ਸਗੋਂ ਇਹ ਤੁਹਾਡੀਆਂ ਕੁਐਰੀਜ਼ (queries) ਨੂੰ ਹੌਲੀ ਕਰਦੇ ਹਨ।

  2. ਡਿਲੀਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਆਰਕਾਈਵ (Archive) ਕਰੋ ਲੱਖਾਂ ਰੋਅਜ਼ ਨੂੰ ਇੱਕੋ ਵਾਰ ਵਿੱਚ ਡਿਲੀਟ ਨਾ ਕਰੋ। ਇਸ ਨਾਲ ਤੁਹਾਡੀਆਂ ਟੇਬਲਾਂ ਲਾਕ ਹੋ ਜਾਣਗੀਆਂ ਅਤੇ ਤੁਹਾਡਾ ਡੇਟਾਬੇਸ ਕ੍ਰੈਸ਼ ਹੋ ਸਕਦਾ ਹੈ। ਪਹਿਲਾਂ, ਆਰਕਾਈਵ ਟੇਬਲਾਂ ਬਣਾਓ ਅਤੇ 90 ਦਿਨਾਂ ਤੋਂ ਪੁਰਾਣੇ ਨਾ-ਐਕਟਿਵ (inactive) quotes ਨੂੰ ਉਹਨਾਂ ਵਿੱਚ ਭੇਜ ਦਿਓ।

  3. ਬੈਚਡ ਡਿਲੀਟ (Batched deletes) ਦੀ ਵਰਤੋਂ ਕਰੋ ਰੋਅਜ਼ ਨੂੰ 10,000 ਦੇ ਛੋਟੇ ਹਿੱਸਿਆਂ (chunks) ਵਿੱਚ ਡਿਲੀਟ ਕਰੋ। ਇਹ ਟੇਬਲ ਨੂੰ ਲੰਬੇ ਸਮੇਂ ਲਈ ਲਾਕ ਹੋਣ ਤੋਂ ਰੋਕਦਾ ਹੈ। ਫੋਰਨ ਕੀ (foreign key) ਰਿਲੇਸ਼ਨਸ਼ਿਪਸ ਦਾ ਧਿਆਨ ਰੱਖਦੇ ਹੋਏ ਹਮੇਸ਼ਾ ਪਹਿਲਾਂ ਚਾਈਲਡ ਟੇਬਲਾਂ ਨੂੰ ਡਿਲੀਟ ਕਰੋ। ਇਸਦਾ ਕ੍ਰਮ ਇਹ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ:

  • quote_item_option
  • quote_address_item
  • quote_shipping_rate
  • quote_payment
  • quote_address
  • quote_item
  • quote
  1. ਆਪਟੀਮਾਈਜ਼ (Optimize) ਅਤੇ ਇੰਡੈਕਸ (Index) ਕਰੋ ਡਿਸਕ ਸਪੇਸ ਵਾਪਸ ਲੈਣ ਲਈ OPTIMIZE TABLE ਚਲਾਓ। ਡੇਟਾਬੇਸ ਨੂੰ ਐਕਟਿਵ quotes ਜਲਦੀ ਲੱਭਣ ਵਿੱਚ ਮਦਦ ਕਰਨ ਲਈ ਕੰਪੋਜ਼ਿਟ ਇੰਡੈਕਸ (composite indexes) ਜੋੜੋ। ਉਦਾਹਰਨ ਲਈ, (is_active, updated_at) 'ਤੇ ਇੱਕ ਇੰਡੈਕਸ ਜੋੜੋ।

  2. ਸਫਾਈ ਨੂੰ ਆਟੋਮੇਟ (Automate) ਕਰੋ Magento CLI ਕਮਾਂਡ ਦੀ ਵਰਤੋਂ ਕਰੋ: bin/magento sales:cleanQuotes. ਘੱਟ ਟ੍ਰੈਫਿਕ ਦੌਰਾਨ ਇਸਨੂੰ ਹਫ਼ਤਾਵਾਰੀ ਚਲਾਉਣ ਲਈ ਇੱਕ cron job ਸੈੱਟ ਕਰੋ।

ਪ੍ਰੋ ਟਿਪ (Pro Tip): ਗੈਸਟ ਕਾਰਟ (Guest carts) ਸਭ ਤੋਂ ਵੱਧ ਭਾਰ ਪਾਉਂਦੇ ਹਨ। ਆਪਣੀ ਕੌਂਫਿਗਰੇਸ਼ਨ ਵਿੱਚ ਗੈਸਟ ਕੋਟ ਦੀ ਮਿਆਦ (lifetime) ਘਟਾ ਕੇ 7 ਦਿਨ ਕਰ ਦਿਓ। ਇਹ ਅਸਲੀ ਗਾਹਕਾਂ ਨੂੰ ਪ੍ਰੇਸ਼ਾਨ ਕੀਤੇ ਬਿਨਾਂ ਤੁਹਾਡੇ ਡੇਟਾਬੇਸ ਨੂੰ ਹਲਕਾ ਰੱਖਦਾ ਹੈ।

ਇਹਨਾਂ ਕਦਮਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਕਲਾਇੰਟ ਦੇ ਚੈੱਕਆਊਟ ਲੋਡ ਹੋਣ ਦੇ ਸਮੇਂ ਵਿੱਚ 6.5s ਤੋਂ 1.4s ਤੱਕ ਦੀ ਕਮੀ ਦੇਖੀ ਗਈ। ਉਹਨਾਂ ਨੇ 9GB ਡੇਟਾਬੇਸ ਸਪੇਸ ਵੀ ਵਾਪਸ ਪ੍ਰਾਪਤ ਕੀਤੀ।

ਆਪਣੇ ਕਨਵਰਜ਼ਨ ਰੇਟ (conversion rates) ਨੂੰ ਉੱਚਾ ਰੱਖਣ ਲਈ ਆਪਣੀਆਂ quote ਟੇਬਲਾਂ ਨੂੰ ਛੋਟਾ ਰੱਖੋ।

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