Magento 2 ಚೆಕ್ಔಟ್ ವಿಳಂಬ: Quote Table ಎಂಬ ಮೌನ ಕಿಲ್ಲರ್
ನಿಮ್ಮ Magento 2 ಸ್ಟೋರ್ನಲ್ಲಿ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಕುಂಠಿತಗೊಳಿಸುವ ಒಂದು ಮೌನ ಕಿಲ್ಲರ್ ಇದೆ. ಅದು ನಿಮ್ಮ ಡೇಟಾಬೇಸ್ನಲ್ಲಿ ಅಡಗಿದೆ.
ಗ್ರಾಹಕರು ಪ್ರತಿ ಬಾರಿ ಕಾರ್ಟ್ಗೆ ಉತ್ಪನ್ನವನ್ನು ಸೇರಿಸಿದಾಗಲೆ마다 quote ಮತ್ತು quote_item ಟೇಬಲ್ಗಳು ಬೆಳೆಯುತ್ತವೆ. ಅವರು ಖರೀದಿಸದಿದ್ದರೂ, ಆ ರೆಕಾರ್ಡ್ ಅಲ್ಲಿಯೇ ಉಳಿಯುತ್ತದೆ. ತಿಂಗಳುಗಳು ಕಳೆದಂತೆ, ಈ ಟೇಬಲ್ಗಳು ಲಕ್ಷಾಂತರ ಸಾಲುಗಳನ್ನು (rows) ತಲುಪುತ್ತವೆ.
ನಾನು ಒಮ್ಮೆ quote ಟೇಬಲ್ನಲ್ಲಿ 15 ಮಿಲಿಯನ್ ಸಾಲುಗಳನ್ನು ಹೊಂದಿದ್ದ ಒಂದು ಸ್ಟೋರ್ ಅನ್ನು ನೋಡಿದ್ದೆ. ಚೆಕ್ಔಟ್ ವೇಗವು 1.2 ಸೆಕೆಂಡುಗಳಿಂದ 8 ಸೆಕೆಂಡುಗಳಿಗೆ ಕುಸಿಯಿತು. ವ್ಯಾಪಾರಿಗೆ ಇದು ಏಕೆ ಎಂದು ತಿಳಿಯಲಿಲ್ಲ. ಫ್ರಂಟ್ಎಂಡ್ ಕ್ಯಾಶ್ ಆಗಿದ್ದರಿಂದ, ಚೆಕ್ಔಟ್ ವಿಫಲವಾಗುವವರೆಗೆ ಎಲ್ಲವೂ ಸರಿಯಾಗಿ ಕಾಣುತ್ತಿತ್ತು.
ದೊಡ್ಡ quote ಟೇಬಲ್ಗಳು ಈ ಕೆಳಗಿನ ಸಮಸ್ಯೆಗಳನ್ನು ಉಂಟುಮಾಡುತ್ತವೆ:
- ಭಾರೀ ಡೇಟಾಬೇಸ್ ಜೋಯನ್ಗಳಿಂದಾಗಿ (database joins) ಕಾರ್ಟ್ ಪೇಜ್ ಲೋಡ್ ಆಗಲು ವಿಳಂಬವಾಗುತ್ತದೆ.
- ಶಿಪ್ಪಿಂಗ್ ಮತ್ತು ಒಟ್ಟು ಮೊತ್ತಕ್ಕಾಗಿ (totals) ಮಾಡುವ ಚೆಕ್ಔಟ್ AJAX ಕರೆಗಳು ನಿಧಾನವಾಗುತ್ತವೆ.
- ಅಡ್ಮಿನ್ ಆರ್ಡರ್ ರಚನೆ ನಿಧಾನವಾಗುತ್ತದೆ.
- ಡೇಟಾಬೇಸ್ ಬ್ಯಾಕಪ್ ಮತ್ತು ರಿಕವರಿ ಸಮಯ ಹೆಚ್ಚಾಗುತ್ತದೆ.
- PHP-FPM ಮೇಲೆ ಹೆಚ್ಚಿನ ಮೆಮೊರಿ ಒತ್ತಡ ಉಂಟಾಗುತ್ತದೆ.
ಇದನ್ನು ಸರಿಪಡಿಸುವುದು ಹೇಗೆ:
ಹಾನಿಯನ್ನು ಅಳೆಯಿರಿ ನಿಮ್ಮ ರೋ (row) ಸಂಖ್ಯೆ ಮತ್ತು ಟೇಬಲ್ ಗಾತ್ರವನ್ನು ಪರಿಶೀಲಿಸಿ. stale_inactive ಸಂಖ್ಯೆಯನ್ನು ಗಮನಿಸಿ. ಇವು 30 ದಿನಗಳಿಗಿಂತ ಹಳೆಯದಾದ ಅಬ್ಯಾಂಡನ್ಡ್ ಕಾರ್ಟ್ಗಳು (abandoned carts). ಇವು ಯಾವುದೇ ಪ್ರಯೋಜನ ನೀಡುವುದಿಲ್ಲ, ಬದಲಾಗಿ ನಿಮ್ಮ ಕ್ವೇರಿಗಳನ್ನು (queries) ನಿಧಾನಗೊಳಿಸುತ್ತವೆ.
ಡಿಲೀಟ್ ಮಾಡುವ ಮೊದಲು ಆರ್ಕೈವ್ ಮಾಡಿ ಲಕ್ಷಾಂತರ ಸಾಲುಗಳನ್ನು ಒಂದೇ ಬಾರಿಗೆ ಡಿಲೀಟ್ ಮಾಡಬೇಡಿ. ಇದು ನಿಮ್ಮ ಟೇಬಲ್ಗಳನ್ನು ಲಾಕ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಡೇಟಾಬೇಸ್ ಕ್ರ್ಯಾಶ್ ಆಗುವಂತೆ ಮಾಡುತ್ತದೆ. ಮೊದಲು, ಆರ್ಕೈವ್ ಟೇಬಲ್ಗಳನ್ನು ರಚಿಸಿ ಮತ್ತು 90 ದಿನಗಳಿಗಿಂತ ಹಳೆಯದಾದ ಇನ್-ಆಕ್ಟಿವ್ ಕೋಟ್ಗಳನ್ನು (inactive quotes) ಅವುಗಳಿಗೆ ವರ್ಗಾಯಿಸಿ.
ಬ್ಯಾಚ್ಡ್ ಡಿಲೀಟ್ ಬಳಸಿ ಸಾಲುಗಳನ್ನು 10,000 ರ ಸಣ್ಣ ಗುಂಪುಗಳಾಗಿ ಡಿಲೀಟ್ ಮಾಡಿ. ಇದು ದೀರ್ಘಕಾಲದ ಟೇಬಲ್ ಲಾಕ್ಗಳನ್ನು ತಡೆಯುತ್ತದೆ. ಫಾರಿನ್ ಕೀ ಸಂಬಂಧಗಳನ್ನು (foreign key relationships) ಗೌರವಿಸಲು ಯಾವಾಗಲೂ ಚೈಲ್ಡ್ ಟೇಬಲ್ಗಳನ್ನು ಮೊದಲು ಡಿಲೀಟ್ ಮಾಡಿ. ಕ್ರಮವು ಹೀಗಿರಬೇಕು:
- quote_item_option
- quote_address_item
- quote_shipping_rate
- quote_payment
- quote_address
- quote_item
- quote
ಆಪ್ಟಿಮೈಸ್ ಮತ್ತು ಇಂಡೆಕ್ಸ್ ಮಾಡಿ ಡಿಸ್ಕ್ ಸ್ಪೇಸ್ reclaimed ಮಾಡಲು OPTIMIZE TABLE ಬಳಸಿ. ಡೇಟಾಬೇಸ್ ಆಕ್ಟಿವ್ ಕೋಟ್ಗಳನ್ನು ವೇಗವಾಗಿ ಹುಡುಕಲು ಸಹಾಯ ಮಾಡಲು ಕಾಂಪೋಸಿಟ್ ಇಂಡೆಕ್ಸ್ಗಳನ್ನು (composite indexes) ಸೇರಿಸಿ. ಉದಾಹರಣೆಗೆ, (is_active, updated_at) ಮೇಲೆ ಇಂಡೆಕ್ಸ್ ಸೇರಿಸಿ.
ಕ್ಲೀನಪ್ ಅನ್ನು ಆಟೊಮೇಷನ್ ಮಾಡಿ Magento CLI ಕಮಾಂಡ್ ಬಳಸಿ:
bin/magento sales:cleanQuotes. ಕಡಿಮೆ ಟ್ರಾಫಿಕ್ ಇರುವ ಸಮಯದಲ್ಲಿ ವಾರಕ್ಕೊಮ್ಮೆ ಇದನ್ನು ರನ್ ಮಾಡಲು ಕ್ರೋನ್ ಜಾಬ್ (cron job) ಅನ್ನು ಸೆಟ್ ಮಾಡಿ.
ಪ್ರೊ ಟಿಪ್: ಗೆಸ್ಟ್ ಕಾರ್ಟ್ಗಳು (Guest carts) ಅತಿ ಹೆಚ್ಚು ಅತಿಯಾದ ಗಾತ್ರಕ್ಕೆ (bloat) ಕಾರಣವಾಗುತ್ತವೆ. ನಿಮ್ಮ ಕಾನ್ಫಿಗರೇಶನ್ನಲ್ಲಿ ಗೆಸ್ಟ್ ಕೋಟ್ ಅವಧಿಯನ್ನು 7 ದಿನಗಳಿಗೆ ಇಳಿಸಿ. ಇದು ನಿಜವಾದ ಗ್ರಾಹಕರಿಗೆ ತೊಂದರೆಯಾಗದಂತೆ ನಿಮ್ಮ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಲೀನ್ (lean) ಆಗಿಡುತ್ತದೆ.
ಈ ಹಂತಗಳನ್ನು ಬಳಸುವ ಮೂಲಕ ಒಬ್ಬ ಕ್ಲೈಂಟ್ ತಮ್ಮ ಚೆಕ್ಔಟ್ ಲೋಡ್ ಸಮಯವನ್ನು 6.5s ನಿಂದ 1.4s ಗೆ ಇಳಿಸಿದರು. ಅವರು 9GB ಡೇಟಾಬೇಸ್ ಸ್ಪೇಸ್ ಅನ್ನು ಸಹ ಮರುಪಡೆಯುವಲ್ಲಿ ಯಶಸ್ವಿಯಾದರು.
ನಿಮ್ಮ ಕನ್ವರ್ಷನ್ ರೇಟ್ ಅನ್ನು (conversion rates) ಹೆಚ್ಚಾಗಿಡಲು ನಿಮ್ಮ quote ಟೇಬಲ್ಗಳನ್ನು ಚಿಕ್ಕದಾಗಿ ಇರಿಸಿ.
ಮೂಲ (Source): https://dev.to/magevanta/magento-2-quote-table-optimization-scaling-checkout-with-millions-of-abandoned-carts-4pmp
