Ожидание сценария Magento 2 из-за CREATE TEMPORARY TABLE - PullRequest
0 голосов
/ 07 июля 2019

Я использую собственный скрипт импорта товаров (импорт настраиваемых, простых товаров с дополнительными атрибутами, фотографий категорий и т. Д.).

Я сталкиваюсь со странным "ожиданием" при выполнении скрипта при назначении категорий вновь созданному продукту с использованием ($ category содержит массив идентификаторов категорий)

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

После исследования я обнаружил, что задержка начинается, когда скрипт выполняет 2-й цикл 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), а не на моей локальной виртуальной машине разработки (Mysql 5.7)

Я думаю, что проблема связана с настройкой mysql на сервере. Любые идеи приветствуются

1 Ответ

0 голосов
/ 09 июля 2019

Я думаю, что сохранение нового продукта заставляет вас ждать, потому что он делает запись в url_rewrite для этого продукта в соответствии с категорией, которую вы присвоили этому продукту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...