【发布时间】:2019-11-17 08:27:31
【问题描述】:
我正在运行自定义产品导入脚本(导入具有额外属性的可配置简单产品、类别照片等)。
在使用($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 配置有关。 任何想法都非常受欢迎
【问题讨论】:
-
MariaDB 10.3.18 在 prod 上的索引也有问题,而 10.1.x 在本地运行良好:magento.stackexchange.com/questions/292867/…
-
devdocs.magento.com/guides/v2.3/install-gde/… "Magento 还与 MySQL NDB Cluster 7.4.*、MariaDB 10.0、10.1、10.2、Percona 5.7 和其他二进制兼容的 MySQL 技术兼容。"
标签: php mysql mariadb magento2