Ok pour tronquer report_viewed_product_index

12

Je lisais la liste des tableaux qui peuvent être tronqués ( /programming/12205714/list-of-tables-to-safely-truncate-in-magento ) et je n'ai pas vu

report_viewed_product_index

La table est immense et il faut très longtemps pour restaurer la base de données. Est-il sûr de tronquer ces données ou au moins de supprimer les données les plus anciennes?

brentwpeterson
la source
1
Question intéressante, btw. Je me suis posé la même question il y a quelque temps :)
Anna Völkl

Réponses:

17

Autant que je puisse voir / savoir, ce tableau est inclus dans l'événement log_log_clean_after.

Si vous regardez sous le fichier, app/code/core/Mage/Reports/etc/config.xmlvous verrez l'extrait suivant.

<events>
    <log_log_clean_after>
        <observers>
            <reports>
                <class>reports/event_observer</class>
                <method>eventClean</method>
            </reports>
        </observers>
    </log_log_clean_after>
</events>

Cette méthode nettoie simplement tous les événements de rapport, puis les tables de produits consultées et comparées.

public function eventClean(Varien_Event_Observer $observer)
{
    /* @var $event Mage_Reports_Model_Event */
    $event = Mage::getModel('reports/event');
    $event->clean();

    Mage::getModel('reports/product_index_compared')->clean();
    Mage::getModel('reports/product_index_viewed')->clean();

    return $this;
}

Si vous vous assurez que vous disposez de la configuration cron logClean, les rapports doivent également être nettoyés avec.

David Manners
la source
Belle réponse, David :)
Anna Völkl
12

J'ai fait des recherches là-dessus il y a quelque temps, car nous avions également des problèmes avec ce tableau. report_viewed_product_indexest utilisé pour les produits récemment consultés. Si vous n'utilisez pas cette fonctionnalité: allez tronquer :-)

Si vous utilisez la fonctionnalité des produits récemment consultés, vérifiez si votre cron est correctement configuré. Les entrées pour les visiteurs qui n'existent plus dans le log/visitortableau doivent ensuite être supprimées automatiquement lors de l' log_log_clean_afterévénement.

La méthode propre est héritée Mage_Reports_Model_Resource_Product_Index_Viewedde l' Mage_Reports_Model_Resource_Product_Index_Abstractendroit où cela se produit.

/**
 * Clean index (visitor)
 *
 * @return Mage_Reports_Model_Resource_Product_Index_Abstract
 */
public function clean()
{
while (true) {
    $select = $this->_getReadAdapter()->select()
        ->from(array('main_table' => $this->getMainTable()), array($this->getIdFieldName()))
        ->joinLeft(
            array('visitor_table' => $this->getTable('log/visitor')),
            'main_table.visitor_id = visitor_table.visitor_id',
            array())
        ->where('main_table.visitor_id > ?', 0)
        ->where('visitor_table.visitor_id IS NULL')
        ->limit(100);
    $indexIds = $this->_getReadAdapter()->fetchCol($select);

    if (!$indexIds) {
        break;
    }

    $this->_getWriteAdapter()->delete(
        $this->getMainTable(),
        $this->_getWriteAdapter()->quoteInto($this->getIdFieldName() . ' IN(?)', $indexIds)
    );
}
return $this;
}
Anna Völkl
la source
pas trop mal une réponse vous-même;)
David Manners
Hmm, nous avons beaucoup d'enregistrements avec Visitor_id est NULL dans report_viewed_product_index - il semble que ces enregistrements ne seront pas supprimés
Jiří Chmiel