कैसे बड़ी sales_flat_quote तालिकाओं को संभालना है - परित्यक्त कार्ट इंकार को हटा दें


13

परिस्थिति

हमारे Magento डेटाबेस में हमारे पास तीन टेबल हैं जो बहुत बड़ी हो रही हैं।

  1. sales_flat_quote_shipping_rate: 3045MB
  2. sales_flat_quote_address: 1688MB
  3. sales_flat_quote: 1897MB

जो कि 6GB से ज्यादा डेटा है।

मुझे यह लेख मिला है कि इन तालिकाओं को कैसे काटें । यह लेख केवल तीसरी तालिका की बात करता है।

मुझे छंटनी के बारे में निश्चित नहीं है, और मैं 60 दिनों से अधिक पुराने सभी डेटा को हटाना पसंद करता हूं। लेख 17 मिलियन रिकॉर्ड की बात करता है - हमारे पास 20 हैं! यदि मैं सही हूं, तो इन रिकॉर्डों को हटाना टेबल को लॉक नहीं करेगा, और मैं वर्तमान में परीक्षण इंस्टॉलेशन पर इसका परीक्षण कर रहा हूं। यह काम करने लगता है, और यह साइट के साथ बहुत ज्यादा संघर्ष नहीं करता है।

प्रशन

  • मैं जानना चाहूंगा कि क्या मैं अन्य दो तालिकाओं के लिए समान क्वेरी का उपयोग कर सकता हूं?
  • मैं सोच रहा हूं कि ये टेबल किस लिए हैं।

जवाबों:


22
DELETE FROM sales_flat_quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 60 DAY)

sales_flat_quote और यह संबंधित तालिकाओं के कैस्केड को हटाने के लिए विदेशी कुंजी संबंधों का उपयोग करता है, इसलिए प्राथमिक तालिका में हटाए गए सभी संबंधित प्रविष्टियों को अन्य तालिकाओं में स्वचालित रूप से हटा देता है।

एक बार जब आप इसे आकार में प्राप्त कर लेते हैं, तो आप आसानी से पर्यवेक्षक को संशोधित कर सकते हैं (अनिवार्य यहां एक मॉड्यूल बना सकते हैं) जो सभी उद्धरणों को शामिल करने के लिए समाप्त उद्धरणों को साफ करने के लिए माना जाता है जैसा कि पहले लिंक में छोड़ दिया गया गाड़ी छूट और लॉग की अवधारण के लिए अनुकूलित अवधारण के साथ किया जाता है। ग्राहक उद्धरण में एक उचित अवधि के लिए ताकि आपके ग्राहक पागल न हों जब उनकी गाड़ी अनपेक्षित रूप से खाली हो जाती है: क्या मैगेंटो में अनकॉवर्ड बोली रिकॉर्ड कभी हटाए गए हैं?

या Fabrizio Branca के AOE उद्धरण क्लीनर का उपयोग करें

sales_flat_quote * तालिकाओं में खरीदारी कार्ट सामग्री होती है। यह एक उद्धरण के रूप में जाना जाता है और तब तक आयोजित किया जाता है जब तक ग्राहक ऑर्डर देने का निर्णय नहीं लेता। समाप्त उद्धरणों के लिए जिन्हें सेल्स-ऑर्डर में बदल दिया गया है, मैगेंटो स्वचालित रूप से उन्हें क्रॉन जॉब से साफ कर देता है। खुले उद्धरणों को शामिल करने के लिए तर्क को कभी बढ़ाया नहीं गया था।


मैं देखता हूं कि दूसरी तालिका का आकार घटता है, इसलिए कैस्केडिंग कार्य करता है। मैं AOE मॉड्यूल का परीक्षण करने जा रहा हूं। यह एक अच्छी टिप है!
SPRBRN

1
मैंने उस स्क्रिप्ट को कई बार चलाया limit 1000000, जब तक कि 60 दिनों से अधिक पुराने सभी रिकॉर्ड नहीं चले गए। फिर मैंने AOE कोट क्लीनर मॉड्यूल स्थापित किया। मैंने 20 मी डिलीट के लिए एओई मॉड्यूल का उपयोग नहीं किया, क्योंकि वेबसाइट ने काम करना बंद कर दिया था - कम से कम टेस्ट मशीन पर। स्क्रिप्ट में कोई समस्या नहीं थी।
एसपीआरबीआरएन

1
आपका स्वागत है! फ़ेब्रिज़ियो के मॉड्यूल उपलब्ध होने से पहले मुझे समस्या के तरीके से निपटना था और इसलिए आपके क्लीनअप के समान कुछ करने के बाद प्रेक्षक मार्ग पर चला गया। इस गन को साफ करने में करीब 20 पास लगे। अब यह निर्धारित सफाई पर है, कोई चिंता नहीं!
फासको लैब्स

मैं कुछ रिकॉर्ड्स को हटाना चाहता हूं जो ग्राहक मौजूद नहीं है।
लवली सेतिया

1

Magento2 में, 'sales_flat_quote' को 'उद्धरण' से बदल दिया गया था, इसलिए SQL कमांड का अनुसरण करके Magento2 के लिए इस समस्या को ठीक किया जा सकता है:

update quote set items_count = NULL

1
@ DELETE FROM quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 60 DAY)
फियास्को

0

यद्यपि फ़ास्को लैब्स का समाधान काम करता है, मैं बस गेट-गो से एक एक्सटेंशन राइट के साथ शुरू करूँगा Mage_Sales_Model_Quote_Resource_Collectionऔर चुनने के पुराने उद्धरणों को फ़िल्टर और निकालने के लिए उपयोग करूंगा । उचित तरीकों का उपयोग करके, आप यह सुनिश्चित कर सकते हैं कि आपका ऑपरेशन डेटाबेस बाधाओं या कच्चे प्रश्नों पर भरोसा न करके किसी भी Magento की स्थापना पर काम करेगा।

कुछ ऐसा (अप्रयुक्त)…

$collection = Mage::getModel('sales/quote')->getCollection() 
    -->addFieldToSelect('entity_id') // this is important
    -->addFieldToFilter('created_at', array('lt' => 'some_date'));

foreach ($collection as $quote) {
    $quote->delete(); // safely delete selected quote
}

आप इसे बंद कर सकते हैं Mage_Logया अपना स्वयं का अकेला विस्तार कर सकते हैं। बहुत साधारण।


जब AOE के पास डाउनलोडिंग के लिए काम करने वाला मॉड्यूल है तो मैं अपना खुद का मॉड्यूल क्यों बनाना चाहूंगा?
SPRBRN

1
AOE एक्सटेंशन बहुत बढ़िया हैं, इसलिए मैं उन सभी को अस्वीकार नहीं कर रहा हूं। लेकिन आपको कारण बताने के लिए .. 1.एक्सटेंशन में मैन्युअल प्रश्नों का उपयोग करने से बचें। 2.यदि संभव हो तो आप एक्सटेंशन को स्वतंत्र बनाने का प्रयास करें। DELETEइन जैसे प्रश्न डेटाबेस की कमी पर निर्भर करते हैं, जिसे भविष्य में बदला जा सकता है। 3.Magento फ़ैक्टरी विधियों का उचित रूप से उपयोग करें।
म्यूजिकलिफ्टमे

लगता है कि एक की तरह बनाया गया था थोड़ी देर पहले @musicliftsme .. आम तौर पर वे बहुत अच्छा कर रहे हैं
Erfan

0
DELETE FROM sales_flat_quote WHERE entity_id NOT IN (SELECT quote_id FROM sales_flat_order);

यह क्वेरी सभी उद्धरणों को हटा देगी, जहां ऑर्डर में परिवर्तित नहीं किया गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.