Медленные запросы SELECT DISTINCT Есть решение

Добрый день!

В логах сайта у хостера каждый день появляются медленные запросы к базе данных (примерно 300 шт). Сайт подтормаживает периодически.

Подсказки из этой темы мне не помогают. Конкретно:

1. Установка optimizer_search_depth = 0 у хостера сделать невозможно (переходить на VPS не вариант).

2. Установка 'filters_features' => 'exists' в файле wa-config/apps/shop/config.php увеличило количество медленных запросов до 3000 шт.

Уважаемые форумчане, подскажите, куда копать дальше? 

Примеры медленных запросов:

SELECT DISTINCT p.*,p.id FROM shop_product p JOIN shop_category_products cp1 ON p.id = cp1.product_id WHERE p.STATUS = 1 AND cp1.category_id IN(676,675,674,672,671,677,679,682,683,690,1077,1078,1079,1080,1110,1119) ORDER BY p.id=p.id,p.total_sales DESC,IF(p.image_id IS NULL,0,1) DESC,1 LIMIT 432,24
UPDATE `shop_product_skus` SET `count`='2',`id`='16742',`product_id`='21166' WHERE id = '16742'
REPLACE INTO shop_lastmodified_hash (`url`, `hash`, `date`) VALUES ('https://мой-сайт.com/product/rychag-rsm-100415010-don1500/', '5766ac880159d4ca607456dc0d568965', '2018-09-14 15:42:33')
SELECT p.*, r.sort FROM shop_promo AS p JOIN shop_promo_routes AS r ON p.id=r.promo_id WHERE r.storefront IN ('мой-сайт.com/','мой-сайт.com') AND type='link' AND p.enabled > 0 ORDER BY r.sort, p.id


SELECT DISTINCT p.*,p.id,alsobought.orders_count
FROM shop_product p
JOIN (SELECT oi1.product_id, COUNT(*) orders_count FROM shop_order_items oi1
JOIN (
SELECT order_id FROM shop_order_items WHERE product_id = 17965 ORDER BY id DESC LIMIT 2000
) t ON oi1.order_id = t.order_id
WHERE oi1.product_id != 17965 AND oi1.type = "product"
GROUP BY oi1.product_id
ORDER BY orders_count DESC
LIMIT 50) alsobought
ON p.id = alsobought.product_id
WHERE p.STATUS = 1
ORDER BY alsobought.orders_count DESC
LIMIT 12

Чаще всего появляются две группы запросов: 

SELECT DISTINCT p.*,p.id,alsobought.orders_count ....

и

SELECT DISTINCT p.*,p.id FROM shop_product p JOIN ....

Заранее благодарен!

5 ответов

  • 2
    Михаил Ушенин Webasyst 28 сентября 2018 12:08 # Решение

    Попробуйте в файле wa-apps/shop/lib/classes/shopProductsCollection.class.php после строк 508–509

        $this->setHash(implode('/', $hash));
    }

    добавить

    if (empty($this->group_by)) {
        $this->group_by = 'p.id';
    }

    • +1
      sergfes sergfes 2 октября 2018 10:29 #

      После применения данного фикса, медленные запросы не появляются. Спасибо!

      Наконец-то проблема решилась. Нужно ли применять данный фикс каждый раз при обновлении движка?

  • 1
    sergfes 28 сентября 2018 12:24 #

    Сделал изменение, буду наблюдать и отпишусь.

    Благодарю!

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите