首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magento死锁

Magento死锁
EN

Stack Overflow用户
提问于 2012-11-09 13:50:23
回答 5查看 13.1K关注 0票数 9

我正在使用Magento1.7.0.2社区版,我遇到了一个大问题-死锁和“锁定等待超时超过”错误。执行特定CRON任务时存在问题

  • 进口/更新产品(尺寸,颜色,制造商以及)。大约有5000种产品,但是在90%的脚本中会出现“锁定等待超时”错误或死锁错误。脚本是使用Magento准则开发的,如果没有其他进程正在运行,它可以正常工作。例如,如果重新索引正在运行,我们肯定会得到一个错误。它接缝是因为表锁
  • 在某些情况下,Magento会设置一个读锁。我已经阅读了几个有关这方面的主题,以及要更改/lib/Zend/Db/Statement/Pdo.php _execute函数的唯一合适的解决方案。由于我们期待着将Magento升级到最新的稳定版本,我们负担不起更改核心文件的费用。

那么,我的问题是--有没有办法避免这种情况(无论是在PHP、MySQL还是服务器(我们使用nginx)级别)?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-11-12 20:39:00

当我一次进口五到六个以上的产品时,我发现了这个问题。有更多关于可用死锁的这里信息。

为了解决这个问题,我必须尽可能地将数据库查询放在斯莱尔事务中,如下所示:

代码语言:javascript
复制
$adapter = Mage::getModel('core/resource')->getConnection('core_write');
// Commit any existing transactions (use with caution!)
if ($adapter->getTransactionLevel > 0) {
    $adapter->commit();
}
$adapter->query('SET TRANSACTION ISOLATION LEVEL SERIALIZABLE');
$product->save(); // etc

交易示例:

代码语言:javascript
复制
$adapter = Mage::getModel('core/resource')->getConnection('core_write');
// Commit any existing transactions (use with caution!)
if ($adapter->getTransactionLevel > 0) {
    $adapter->commit();
}
$adapter->query('SET TRANSACTION ISOLATION LEVEL SERIALIZABLE');
$adapter->beginTransaction();
try {
    $adapter->query(/* SQL goes here */);
    $adapter->commit();
} catch (Exception $e) {
    // Rollback on fail always
    $adapter->rollBack();
    throw $e;
}

如果您在这方面需要进一步的帮助,请随时通知我。

票数 9
EN

Stack Overflow用户

发布于 2013-05-24 15:09:22

我们也遇到了一个类似的问题:当顾客试图在他们的购物车中添加一些东西时,每天都会出现几次死锁。我们的索引似乎也与当时正在刷新的索引有关(很可能是目录表的重新索引)。最后解决问题的唯一方法是实现异步重新索引(我们最终购买了一个扩展)。

票数 4
EN

Stack Overflow用户

发布于 2013-10-09 07:07:57

我们也遇到了这个问题,试图并行地保存产品。

我们面临的主要问题是,在最初保存产品之后,随后的索引过程没有包含在产品保存事务中。因此,每当我们遇到死锁时,它都是由索引器引起的,而在它的顶部,我们有一个不一致的数据库,这会导致无效的产品-urls,并迫使我们在每次发生时都重新索引所有的东西。

我们最终得到的解决方案是将索引器包含到事务中,并重新尝试最终导致死锁的事务。然而,这并不是一个理想的解决方案,它是我们所能想到的最好的解决方案,而且在99%的时间里有效。

magento的问题在于,编程是粗制滥造的,事件驱动的瑞士军刀编码方法在magento的内部机制中产生了许多深刻的问题。

我们的下一个方法将是我们自己的接口,从头开始编写,将产品并行保存,并使数据库具有与magento保存相同的结果。当然,这将意味着我们不能再添加扩展而不将它们集成到这个新概念中,以防它们与产品相关。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13309341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档