OK para truncar report_viewed_product_index


12

Eu estava lendo a lista de tabelas que podem ser truncadas ( /programming/12205714/list-of-tables-to-safely-truncate-in-magento ) e não vi

report_viewed_product_index

A tabela é enorme e leva muito tempo para restaurar o banco de dados. É seguro truncar esses dados ou pelo menos remover os dados mais antigos?


1
Pergunta interessante, btw. Perguntei-me o mesmo há algum tempo :) :)
Anna Völkl

Respostas:


17

Tanto quanto posso ver / saber, esta tabela está incluída no evento log_log_clean_after.

Se você olhar embaixo do arquivo app/code/core/Mage/Reports/etc/config.xml, verá o seguinte trecho.

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

Esse método simplesmente limpa todos os eventos do relatório e, em seguida, o produto visualiza e compara as tabelas.

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

Se você tiver a configuração cron do logClean, os relatórios também deverão ser limpos com ela.


Resposta agradável, David :)
Anna Volkl

12

Coloquei algumas pesquisas nisso há algum tempo, pois também tínhamos problemas com essa tabela. report_viewed_product_indexé usado para os produtos visualizados recentemente. Se você não usar esse recurso: Vá e trunque :-)

Se você usar a funcionalidade de produtos vistas recentemente, verifique se o seu cron está configurado corretamente. As entradas para visitantes que não existem mais na log/visitortabela devem ser removidas automaticamente no log_log_clean_afterevento.

O método clean é herdado Mage_Reports_Model_Resource_Product_Index_Viewedde Mage_Reports_Model_Resource_Product_Index_Abstractonde isso acontece.

/**
 * 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;
}

não resposta um muito ruim mesmo;)
David Manners

Hmm, temos muitos registros com o visitor_id é NULL no report_viewed_product_index - parece que esses registros não serão removidos #
317 Jiří Chmiel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.