Wie gehe ich mit riesigen sales_flat_quote-Tabellen um?


13

Situation

In unserer Magento-Datenbank haben wir drei Tabellen, die zu groß werden.

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

Das sind mehr als 6 GB Daten.

Ich habe diesen Artikel zum Abschneiden dieser Tabellen gefunden . Dieser Artikel spricht nur von der dritten Tabelle.

Ich bin mir nicht sicher, ob die Daten abgeschnitten wurden, und bevorzuge es, alle Daten zu löschen, die älter als 60 Tage sind. Der Artikel spricht von 17 Millionen Datensätzen - wir haben 20! Wenn ich richtig liege, wird die Tabelle durch das Löschen dieser Datensätze nicht gesperrt. Dies wird derzeit in einer Testinstallation getestet. Das scheint zu funktionieren und widerspricht der Website nicht zu sehr.

Fragen

  • Ich möchte wissen, ob ich dieselbe Abfrage auch für die anderen beiden Tabellen verwenden kann.
  • Ich frage mich, wozu diese Tische gut sind.

Antworten:


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

sales_flat_quote Die zugehörigen Tabellen verwenden Fremdschlüsselbeziehungen zum Löschen in der Kaskade, sodass beim Löschen in der Primärtabelle alle zugehörigen Einträge in den anderen Tabellen automatisch gelöscht werden.

Sobald Sie die Größe verringert haben, können Sie den Beobachter (obligatorisch hier ein Modul erstellen), der abgelaufene Angebote bereinigen soll, einfach so ändern, dass alle Angebote berücksichtigt werden in Kundenangeboten für einen angemessenen Zeitraum, damit Ihre Kunden nicht sauer werden, wenn sich ihr Einkaufswagen unerwartet leert: Werden nicht konvertierte Angebotsdatensätze jemals in Magento entfernt?

oder verwenden Sie den AOE Quote Cleaner von Fabrizio Branca

sales_flat_quote * -Tabellen enthalten den Inhalt des Einkaufswagens. Dies wird als Angebot bezeichnet und so lange aufbewahrt, bis der Kunde die Bestellung abschließt. Für fertige Angebote, die in einen Kundenauftrag konvertiert wurden, löscht Magento diese automatisch mit einem Cron-Auftrag. Die Logik wurde nie um offene Anführungszeichen erweitert.


Ich sehe, dass die Größe der anderen Tabelle abnimmt, sodass die Kaskadierung funktioniert. Ich werde das AOE-Modul testen. Das ist ein guter Tipp!
SPRBRN

1
Ich habe dieses Skript viele Male mit ausgeführt limit 1000000, bis alle Datensätze, die älter als 60 Tage waren, weg waren. Dann habe ich das AOE Quote Cleaner-Modul installiert. Ich habe das AOE-Modul für die 20-Meter-Löschvorgänge nicht verwendet, da die Website nicht mehr funktioniert - zumindest auf dem Testcomputer. Das Skript war ohne Probleme.
SPRBRN

1
Bitte! Ich musste das Problem weit zurück anpacken, bevor das Modul von Fabrizio verfügbar wurde. Nachdem ich etwas Ähnliches wie Ihre Bereinigung getan hatte, ging ich auf Beobachterroute. Es dauerte ungefähr 20 Pässe, um die Munition zu beseitigen. Keine Sorge, jetzt, da die Bereinigung geplant ist!
Fiasko Labs

Ich möchte einige Datensätze löschen, die der Kunde nicht hat.
Lovely Setia

1

In Magento2 wurde "sales_flat_quote" durch "quote" ersetzt, sodass der folgende SQL-Befehl dieses Problem für Magento2 beheben kann:

update quote set items_count = NULL

1
Art, mit @ Fiaskos Antwort DELETE FROM quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 60 DAY)
mischen

0

Obwohl die Lösung von Fiasco Labs funktioniert, würde ich gleich von Anfang an mit einer Erweiterung beginnen und Mage_Sales_Model_Quote_Resource_Collectionzum Filtern und Entfernen älterer Zitate verwenden. Mit den richtigen Methoden können Sie sicherstellen, dass Ihr Betrieb bei jeder Magento-Installation funktioniert, indem Sie sich nicht auf Datenbankeinschränkungen oder unformatierte Abfragen verlassen.

So etwas wie (ungetestet) ...

$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
}

Sie können dies ausbauen Mage_Logoder eine eigene eigenständige Erweiterung erstellen. Ziemlich einfach.


Warum sollte ich mein eigenes Modul erstellen, wenn AOE ein funktionierendes Modul zum Download bereit hält?
SPRBRN,

1
Die AOE-Erweiterungen sind großartig, deshalb diskreditiere ich sie überhaupt nicht. Aber um Ihnen Gründe zu nennen. 1.Vermeiden Sie die Verwendung manueller Abfragen in Erweiterungen. 2.Versuchen Sie, Ihre Nebenstellen möglichst unabhängig zu machen. DELETEAbfragen wie diese hängen von der Datenbankeinschränkung ab, die in Zukunft möglicherweise geändert wird. 3.Verwenden Sie die Magento Factory-Methoden entsprechend.
musicliftsme

Scheint so, dass man vor einer Weile @musicliftsme gemacht wurde .. in der Regel sind sie ziemlich gut
Erfan

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

Diese Abfrage löscht alle Angebote, die nicht in Bestellungen umgewandelt wurden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.