修复 Magento 2 中的死锁问题

redmaomail 2024-07-24 18:18 阅读数 64 #Magento

红帽云邮外贸主机

死锁问题是 Magento 2 上最大和最难解决的问题之一,每个 Magento 开发人员迟早都会遇到它。一旦您开始搜索如何解决 Magento 中的死锁问题,您将很难找到最终的答案。 

1.测量产品节省执行时间

为此,请在 Magento 2 根目录中创建脚本文件夹。然后使用以下代码将test.php文件添加到其中:

<?php

error_reporting(E_ALL);

ini_set('display_errors', 1);

use Magento\Framework\App\Bootstrap;

require __DIR__ . '/../app/bootstrap.php';

$bootstrap = Bootstrap::create(BP, $_SERVER);

$obj = $bootstrap->getObjectManager();

$state = $obj->get(Magento\Framework\App\State::class);

$state->setAreaCode('adminhtml');

$startTime = microtime(true);

$productRepo = $obj->get(Magento\Catalog\Api\ProductRepositoryInterface::class);

$product = $productRepo->getById(39);

$product->setName($product->getName() . ' - test');

$product->setStoreId(0);

$productRepo->save($product);

$endTime = microtime(true);

$executionTime = ($endTime - $startTime);

echo " Execution time of script = ".$executionTime." sec";

?>

然后运行​​php scripts/test.php以测量通过产品存储库保存一个产品所需的时间。

Magento 2.4.4 上,它需要不到一秒的时间。对于常规 Magento 2 商店,可接受的值最多为 2 秒。

如果产品保存在 2 秒内执行,您可以跳过此部分并转到下一部分。

如果您需要找出导致此问题的扩展名,最简单的方法是:

  1. 禁用所有第三方Magento 2 扩展并测量保存产品所需的时间。
  2. 将所有扩展一一启用,衡量产品保存速度。

为每个扩展逐步执行此操作,您会发现哪个扩展对您的性能影响最大。

2.检查数据库配置

Magento 建议使用以下数据库配置以获得更好的性能。因此,如果您遇到 Magento 死锁问题,请检查一下。

您可能还面临以下问题: 

SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction, query was...

您可以尝试更改app/etc/env.php文件中的锁定节点并更改内部配置节点中的前缀。

<?php

return [

    'lock' => [

        'provider' => 'db',

        'config' => [

            'prefix' => 'new-prefix-here'

         ]

    ]

];

然后只需重置索引器并尝试再次重新索引

3. 监控 Cron 执行

如果在执行 cron 作业期间发生 Magento 死锁问题,我们强烈建议安装一些 Magento 2 cron 计划扩展。

它们允许您查看 cron 作业执行图表并更改 cron 作业计划以减少对 CPU 的影响以及同时对数据库的请求数。

如果您发现同时执行了一些扩展进程(超过 10 分钟),请尝试重新安排它们以平均分配负载。


红帽云邮外贸主机

分享到:
版权声明:本站内容源自互联网,如有内容侵犯了你的权益,请联系删除相关内容。
    红帽云邮外贸主机
热门
    红帽云邮外贸主机
    红帽云邮外贸主机