Come gestire enormi tabelle sales_flat_quote: rimuovi i rifiuti del carrello abbandonati


13

Situazione

Nel nostro database magento abbiamo tre tabelle che stanno diventando troppo grandi.

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

Sono oltre 6 GB di dati.

Ho trovato questo articolo su come troncare queste tabelle . Questo articolo parla solo della terza tabella.

Non sono sicuro del troncamento e preferisco eliminare tutti i dati più vecchi di 60 giorni. L'articolo parla di 17 milioni di dischi: ne abbiamo 20! Se sono corretto, l'eliminazione di questi record non bloccherà la tabella e attualmente sto testando questo su un'installazione di prova. Sembra funzionare e non è troppo in conflitto con il sito.

Domande

  • Vorrei sapere se posso usare la stessa query anche per le altre due tabelle?
  • Mi chiedo a cosa servano questi tavoli.

Risposte:


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

sales_flat_quote e le sue tabelle correlate utilizzano le relazioni di chiave esterna per eliminare in cascata, quindi le eliminazioni nella tabella primaria eliminano automaticamente tutte le voci correlate nelle altre tabelle.

Una volta ridimensionato, puoi facilmente modificare l'osservatore (obbligatorio fare un modulo qui) che dovrebbe ripulire le virgolette scadute per includere tutte le citazioni come viene fatto nel primo collegamento con conservazione personalizzata per il recupero del carrello abbandonato e la conservazione dei dati registrati tra i preventivi dei clienti per un periodo ragionevole in modo che i tuoi clienti non si arrabbino quando il loro carrello si svuota inaspettatamente: i record di preventivi non convertiti vengono mai rimossi in Magento?

o usa il detergente preventivo AOE di Fabrizio Branca

Le tabelle sales_flat_quote * contengono i contenuti del carrello. Questo è noto come un preventivo e viene trattenuto fino a quando il cliente non decide di completare l'ordine. Per le offerte finite che sono state convertite in Ordine cliente, Magento le cancella automaticamente con un processo cron. La logica non è mai stata estesa per includere virgolette aperte.


Vedo che la dimensione dell'altra tabella diminuisce, quindi la cascata funziona. Ho intenzione di testare il modulo AOE. Questo è un buon consiglio!
SPRBRN,

1
Ho eseguito quella sceneggiatura molte volte, con limit 1000000, fino a quando tutti i record più vecchi di 60 giorni erano andati. Quindi ho installato il modulo AOE Quote Cleaner. Non ho usato il modulo AOE per le eliminazioni di 20m, poiché il sito Web ha smesso di funzionare, almeno sulla macchina di prova. La sceneggiatura non ha posto alcun problema.
SPRBRN,

1
Prego! Ho dovuto affrontare il problema molto prima che il modulo di Fabrizio diventasse disponibile e quindi ho seguito la strada dell'osservatore dopo aver fatto qualcosa di simile alla tua pulizia. Ci sono voluti circa 20 passaggi per liberare il gunk. Ora che è in programma la pulizia, non preoccuparti!
Fiasco Labs,

Voglio eliminare alcuni record che il cliente non esiste.
Lovely Setia,

1

In Magento2, 'sales_flat_quote' è stato sostituito con 'quote', quindi il seguente comando SQL può risolvere questo problema per Magento2:

update quote set items_count = NULL

1
Un DELETE FROM quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 60 DAY)
po

0

Sebbene la soluzione di Fiasco Labs funzioni, vorrei iniziare con un'estensione fin dall'inizio e utilizzare Mage_Sales_Model_Quote_Resource_Collectionper filtrare e rimuovere le citazioni precedenti di scelta. Utilizzando i metodi appropriati, puoi assicurarti che l'operazione funzionerà su qualsiasi installazione di Magento non basandosi su vincoli del database o query non elaborate.

Qualcosa di simile (non testato) ...

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

Potresti estenderlo Mage_Logo crearne uno autonomo. Abbastanza semplice.


Perché dovrei voler creare il mio modulo quando AOE ha un modulo funzionante pronto per il download?
SPRBRN,

1
Le estensioni AOE sono fantastiche, quindi non scredito affatto. Ma per darti dei motivi .. 1.Evita di usare query manuali nelle estensioni. 2.Cerca di rendere indipendenti le tue estensioni, se possibile. DELETEquery come queste dipendono dal vincolo del database, che potrebbe essere modificato in futuro. 3.Utilizzare i metodi di fabbrica Magento in modo appropriato.
musicliftsme,

Sembra che uno sia stato fatto poco fa @musicliftsme .. di solito sono abbastanza buoni
Erfan

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

Questa query eliminerà tutte le virgolette, che non sono state convertite in ordini.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.