这个问题在这里已经有一个答案:

下订单后,Magento触发了价格驯服(有时需要太长),并且未下达订单(因为ReIndex是交易的一部分):

> SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try
> restarting transaction SQL Query: INSERT INTO
> `catalog_product_index_price_tmp` SELECT
> `catalog_product_index_price`.* FROM `catalog_product_index_price`
> WHERE (entity_id IN('39074', '39075', '39076', '39077', '39078',
> '49702', '49703', '49704', '49705', '49706', '49708', '52288',
> '52289', '52291', '52292')) SQL Params: Array ( )

而且,由于交易失败,有一封电子邮件,因此似乎可以预期(否则将无法实施此电子邮件)。

为了解决此问题,我将驯鹿移到了交易之外,但是我仍然感到困惑为什么需要。

有帮助吗?

解决方案

Magento EE的支持向我暗示,这与级别的价格可用性和目录定价规则有关。

Magento与产品保存类似 - 每当保存产品时,都会清除缓存。例如,如果您使用的是memcached,则没有键或缓存标签,因此整个索引已清除。我见过并有时使用了一个非常肮脏的骇客,这并不迫使缓存明确,而是将缓存标记为无效,需要刷新。

因此,回到重点,您可以通过将索引模式更改为“手动”并自行运行或创建cron以按时间表重新索引(最好在非高峰时段)来实现相同的结果。此类脚本的一个示例如下:

<?php 

class MyCompany_MyModule_Model_Cron {
    public function schedule() {
        //find dirty indexes and process
        for($i=1;$i<10;$i++){
            $_process = Mage::getSingleton('index/indexer')->getProcessById($i);
            $_status = $_process->getStatus();
            if($_status!='pending'){
                $_process->reindexEverything();
            }
        }
     }
}
许可以下: CC-BY-SA归因
scroll top