【问题标题】:Magento reindexing Catalog Search Index Lock wait timeout exceededMagento 重新索引目录搜索索引锁定等待超时
【发布时间】:2014-04-19 13:15:43
【问题描述】:

当我从后端重新索引目录搜索索引时,同时如果我的前端用户正在 mysite 中搜索某些内容,那么我会收到诸如

之类的错误

错误:SQLSTATE[HY000]:一般错误:1205 锁定等待超时 超过;尝试重启事务

谁能告诉我如何解决这个问题。

【问题讨论】:

  • 先检查这里了吗? stackoverflow.com/questions/6000336/…
  • 是的,我检查了所有这些帖子。但这与 magento 更相关。只是我可以停止这种冲突的逻辑。我无法在 magento 中禁用搜索和重新索引。只需要一个更好的解决方案。

标签: mysql magento indexing full-text-search


【解决方案1】:

这是一个 Magento 错误,自 Magento 1.7 以来一直存在。

在重新索引 catalogsearch_fulltext 索引时,会启动一个事务,该事务会连续为每个存储执行以下操作:

  1. 重建catalogsearch_fulltext
  2. 重置搜索结果:更新catalogsearch_query表(设置is_processed为0)并清除catalogsearch_result

从执行catalogsearch_query 查询的那一刻起,前端中的所有搜索都应该等到完整的索引过程完成(它们也会导致写入catalogsearch_querycatalogsearch_result 表)。对于具有多个商店视图的大型目录,这可能需要相当长的时间,从而导致“超过锁定等待超时”错误。

我已通过 Bug 跟踪器向 Magento 报告此问题:http://www.magentocommerce.com/bug-tracking/issue/index/id/933

我认为没有必要将搜索结果存储在数据库中;相反,它们应该存储在注册表中,以便在单个请求期间可以多次引用它们。然后在重新索引期间不再需要重置搜索结果。此外,交易的需求也消失了。

我没有实现这个解决方案,因为我们现在主要使用 ElasticSearch。

【讨论】:

    【解决方案2】:

    是的.. 这是因为 1 行 InnonDB 数据库表同时更新..

    【讨论】:

    • 是的,我从其他帖子中了解到。但是什么是解决方案,这样我就可以避免在 magento 中发生冲突。
    【解决方案3】:

    尝试使用 shell (SSH) 重新索引您的目录搜索索引。

    尝试从 Magento 根目录导航 shell 文件夹。 然后执行以下命令。

    // To check the indexer status.
    php -f indexer.php status 
    
    // To reindex the indexer data.
    php -f indexer.php reindex
    
    // To check the any help in this indexer process.
    php -f indexer.php help
    

    使用 SSH 试试这个,它将帮助您重新索引所有数据。

    【讨论】:

    • 我在几个网店都遇到过这些问题。当您重新索引目录搜索索引并同时在前端执行搜索时,就会发生这种情况。以哪种方式启动重新索引过程并不重要
    • 而且它看起来仍然发生在 Enterprise 1.14.0.1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 2012-02-14
    相关资源
    最近更新 更多