วิธีจัดการกับตาราง sales_flat_quote ขนาดใหญ่ - ลบการปฏิเสธรถเข็นที่ถูกทิ้งร้าง


13

สถานการณ์

ในฐานข้อมูลวีโอไอพีของเราเรามีสามตารางที่เติบโตใหญ่เกินไป

  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 และมันเป็นตารางที่เกี่ยวข้องใช้ความสัมพันธ์กับคีย์ต่างประเทศเพื่อลบบนน้ำตกดังนั้นการลบในตารางหลักจะลบรายการที่เกี่ยวข้องทั้งหมดโดยอัตโนมัติในตารางอื่น ๆ

เมื่อคุณลดขนาดลงคุณสามารถปรับเปลี่ยนผู้สังเกตการณ์ (บังคับให้สร้างโมดูลที่นี่) ซึ่งควรจะล้างราคาที่หมดอายุเพื่อรวมราคาทั้งหมดตามที่ทำในลิงค์แรกพร้อมการเก็บรักษาที่กำหนดเองสำหรับการกู้คืนรถเข็นที่ถูกทิ้งร้าง ในการเสนอราคาของลูกค้าเป็นระยะเวลาที่เหมาะสมเพื่อให้ลูกค้าของคุณไม่โกรธเมื่อรถเข็นของพวกเขาว่างเปล่าโดยไม่คาดคิด: มีการลบบันทึกคำพูดที่ไม่แปลงกลับใน Magento หรือไม่?

หรือใช้โปรแกรมทำความสะอาด Quote AOEของ Fabrizio Branca

sales_flat_quote * มีเนื้อหาในรถเข็นช็อปปิ้ง สิ่งนี้เรียกว่าใบเสนอราคาและถูกระงับจนกว่าลูกค้าจะตัดสินใจสั่งซื้อให้เสร็จ สำหรับใบเสนอราคาเสร็จที่ได้รับการแปลงเป็นใบสั่งขายแล้ววีโอไอพีจะล้างใบเสนอราคาด้วยงาน cron โดยอัตโนมัติ ตรรกะไม่เคยถูกขยายเพื่อรวมเครื่องหมายคำพูดเปิด


ฉันเห็นว่าขนาดของตารางอื่นลดลงดังนั้นการเรียงซ้อนจึงใช้งานได้ ฉันจะทดสอบโมดูล AOE นั่นเป็นเคล็ดลับที่ดี!
SPRBRN

1
ฉันรันสคริปต์นั้นหลายครั้งด้วยlimit 1000000จนกระทั่งระเบียนทั้งหมดที่เก่ากว่า 60 วันหายไป จากนั้นฉันติดตั้งโมดูลทำความสะอาดอ้าง AOE ฉันไม่ได้ใช้โมดูล AOE สำหรับการลบ 20 ม. เนื่องจากเว็บไซต์หยุดทำงาน - บนเครื่องทดสอบอย่างน้อย สคริปต์ไม่มีปัญหาใด ๆ
SPRBRN

1
ยินดีต้อนรับคุณ! ฉันต้องจัดการปัญหากลับก่อนที่โมดูลของ Fabrizio จะพร้อมใช้งานและไปที่เส้นทางผู้สังเกตการณ์หลังจากทำสิ่งที่คล้ายกับการล้างข้อมูลของคุณ ใช้เวลาประมาณ 20 รอบในการล้างขยะ ตอนนี้การล้างข้อมูลตามกำหนดเวลาไม่ต้องกังวล!
Fiasco Labs

ฉันต้องการลบบางระเบียนที่ไม่มีลูกค้าอยู่
Setia น่ารัก

1

ใน Magento2 'sales_flat_quote' ถูกแทนที่ด้วย 'quote' ดังนั้นคำสั่ง SQL ต่อไปนี้สามารถแก้ไขปัญหานี้สำหรับ Magento2:

update quote set items_count = NULL

1
ชนิดผสมกับคำตอบของ @ fiasco:DELETE FROM quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 60 DAY)
nicolallias

0

แม้ว่าโซลูชันของ Fiasco Labs จะใช้งานได้ แต่ฉันจะเริ่มต้นด้วยส่วนขยายได้ทันทีจากการเริ่มต้นและใช้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.ใช้วิธีการโรงงานวีโอไอพีอย่างเหมาะสม
musicliftsme

ดูเหมือนว่าจะมีคนทำเมื่อไม่นานมานี้ @musicliftsme .. โดยปกติแล้วพวกเขาจะค่อนข้างดี
Erfan

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

แบบสอบถามนี้จะลบเครื่องหมายคำพูดทั้งหมดซึ่งไม่ได้แปลงในคำสั่งซื้อ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.