Magento 2脚本由于CREATE TEMPORARY TABLE而等待

时间:2019-07-07 17:24:44

标签: php mysql mariadb magento2

我正在运行自定义产品导入脚本(导入具有额外属性的可配置简单产品,类别照片等)。

使用($ categories包含一个类别ID数组)将类别分配给新创建的产品时,我在脚本执行时面临一个奇怪的“等待”。

$categoryLinkRepository->assignProductToCategories($product->getSku(), $categories);

经过调查,我发现延迟在脚本执行以下函数中的第二次for循环时开始

 public function assignProductToCategories($productSku, array $categoryIds)
{
    $product = $this->getProductRepository()->get($productSku);
    $assignedCategories = $this->getProductResource()->getCategoryIds($product);
    foreach (array_diff($assignedCategories, $categoryIds) as $categoryId) {
        $this->getCategoryLinkRepository()->deleteByIds($categoryId, $productSku);
    }

    foreach (array_diff($categoryIds, $assignedCategories) as $categoryId) {
        /** @var \Magento\Catalog\Api\Data\CategoryProductLinkInterface $categoryProductLink */
        $categoryProductLink = $this->productLinkFactory->create();
        $categoryProductLink->setSku($productSku);
        $categoryProductLink->setCategoryId($categoryId);
        $categoryProductLink->setPosition(0);
        $this->getCategoryLinkRepository()->save($categoryProductLink);
    }
    $productCategoryIndexer = $this->getIndexerRegistry()->get(Indexer\Product\Category::INDEXER_ID);
    if (!$productCategoryIndexer->isScheduled()) {
        $productCategoryIndexer->reindexRow($product->getId());
    }
    return true;
}

奇怪的是,同一功能仅对于新创建的产品会面临延迟,而当我为现有产品运行它时,它运行良好。

服务器上的Mysql进程显示重复查询,等待66秒

Sending data    CREATE TEMPORARY TABLE `tmp_select_tUFtPSHTf3LaHnv19OnapfygPIfXxdCU` (PRIMARY KEY(`url_rewrite_id`),

我仅在生产服务器(运行MariaDB 10.3.16)而不是在本地开发VM(Mysql 5.7)上遇到此问题

我认为该问题与服务器上的mysql配置有关。 任何想法都值得欢迎

1 个答案:

答案 0 :(得分:0)

我认为保存新产品会让您等待,因为它正在url_rewrite中为该产品按照您分配给该产品的类别进行输入