Медленные запросы 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 ответов
Попробуйте в файле wa-apps/shop/lib/classes/shopProductsCollection.class.php после строк 508–509
добавить
После применения данного фикса, медленные запросы не появляются. Спасибо!
Наконец-то проблема решилась. Нужно ли применять данный фикс каждый раз при обновлении движка?
В следующем обновлении это изменение уже будет в коде, повторять его не придётся.
Можете еще сменить тип таблиц с MyISAM на InnoDB для таблиц данные которых часто изменяются.
Сделал изменение, буду наблюдать и отпишусь.
Благодарю!