Oke untuk memotong report_viewed_product_index

12

Saya membaca daftar tabel yang boleh dipotong ( /programming/12205714/list-of-tables-to-safely-truncate-in-magento ) dan saya tidak melihat

report_viewed_product_index

Tabelnya sangat besar dan membutuhkan waktu yang sangat lama untuk memulihkan database. Apakah aman untuk memotong data ini atau setidaknya menghapus data terlama?

brentwpeterson
sumber
1
Pertanyaan menarik, btw. Saya bertanya-tanya hal yang sama beberapa waktu lalu :)
Anna Völkl

Jawaban:

17

Sejauh yang saya bisa melihat / tahu tabel ini termasuk dalam acara tersebut log_log_clean_after.

Jika Anda melihat di bawah file app/code/core/Mage/Reports/etc/config.xmlAnda akan melihat potongan berikut.

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

Metode ini hanya membersihkan semua peristiwa laporan dan kemudian produk dilihat dan dibandingkan tabel.

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

Jika Anda memastikan Anda memiliki pengaturan cron logClean maka laporan juga harus dibersihkan dengan itu.

David Manners
sumber
Jawaban yang bagus, David :)
Anna Völkl
12

Saya menaruh beberapa penelitian di ini beberapa waktu lalu karena kami juga memiliki masalah dengan tabel itu. report_viewed_product_indexdigunakan untuk produk yang baru dilihat. Jika Anda tidak menggunakan fitur ini: Pergi dan terpotong :-)

Jika Anda menggunakan fungsionalitas produk yang dilihat baru-baru ini, periksa apakah cron Anda diatur dengan benar. Entri untuk pengunjung yang tidak ada lagi di log/visitortabel kemudian harus dihapus secara otomatis di log_log_clean_afteracara tersebut.

Metode bersih diwarisi Mage_Reports_Model_Resource_Product_Index_Vieweddari Mage_Reports_Model_Resource_Product_Index_Abstracttempat ini terjadi.

/**
 * 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
sumber
tidak terlalu buruk jawaban sendiri;)
David Manners
Hmm, kami memiliki banyak catatan dengan visitor_id NULL di report_viewed_product_index - tampaknya catatan ini tidak akan dihapus
Jiří Chmiel