Добрый день.
В последнее время столкнулся с проблемой: Google и Яндекс присылают уведомления о том, что страницы сайта очень медленно работают (скорость ответа 3 секунды).
Поддержка хостинга говорит о том, что скрипты сайта неправильно работают и создают огромную нагрузку на MySQL сервер.
При граничном значении в 100 минут сайт потребляет намного больше. Вот график:
http://prntscr.com/jri6e6Посоветовали разобраться с медленными запросами.
Зашел в раздел "Медленные запросы" и обнаружил что в 95% случаях медленным запросом является вот этот код:
SELECT c.id_category, c.id_parent, cl.name, (SELECT COUNT(DISTINCT p.id_product) #
FROM ps_category_product cp
LEFT JOIN ps_product p ON (p.id_product = cp.id_product) INNER JOIN ps_product_shop product_shop
ON (product_shop.id_product = p.id_product AND product_shop.id_shop = 1)
LEFT JOIN `ps_manufacturer` m ON (m.id_manufacturer = p.id_manufacturer)
WHERE cp.id_category = c.id_category
AND product_shop.active = 1 AND product_shop.`visibility` IN ("both", "catalog")
AND EXISTS (SELECT *
FROM `ps_product_attribute_combination` pac
LEFT JOIN `ps_product_attribute` pa ON (pa.`id_product_attribute` = pac.`id_product_attribute`)
WHERE pa.id_product = p.id_product AND pac.`id_attribute` = 11 OR pac.`id_attribute` = 48 ORpac.`id_attribute` = 40 OR pac.`id_attribute` = 56 OR pac.`id_attribute` = 24)
) count_products
FROM ps_category c
LEFT JOIN ps_category_lang cl ON (cl.id_category = c.id_category AND cl.`id_shop` = 1 AND cl.id_lang = 3) RIGHT JOIN ps_category_group cg ON (cg.id_category = c.id_category AND cg.`id_group` IN (1)) WHEREc.nleft > 51
AND c.nright < 60
AND c.level_depth <= 3
AND c.active = 1
GROUP BY c.id_category ORDER BY c.nleft, c.POSITIONВремя ответа от 25 до 39 секунд.
Остальные 5% медленных запросов содержат этот код:
SELECT MAX(c.`date_add`) AS last_visit
FROM `ps_guest` g
LEFT JOIN `ps_connections` c ON c.id_guest = g.id_guest
WHERE g.`id_customer` = 0 LIMIT 1Время ответа - 5 секунд.
Мне никто не может объяснить, за что отвечает этот код и можно ли исправить ситуацию.
Обращаюсь к Вам за помощью, как к людям с большим опытом.
Буду очень благодарен за разъяснения.
Заранее спасибо!