Ускорить магазин на Опенкарте - WT-SHOP.RU

Максим13 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
30.06.2015

Есть интернет магазин на CMS опенкарт, в нём более 14000 категорий и 250000

товаров, которые обновляются каждые сутки. Поэтому кэширование здесь не

поможет.

Задержки загрузки страниц возникают из-за долгого ожидания ответа MySQL

сервера.

При небольшой посещаемости все SQL запросы выполняются быстро, кроме одного

типа:

SELECT DISTINCT SQL_CALC_FOUND_ROWS p.product_id, (SELECT AVG(rating) AS

total FROM oc_review r1 WHERE r1.product_id = p.product_id AND r1.status =

'1' GROUP BY r1.product_id) AS rating, (SELECT price FROM

oc_product_discount pd2 WHERE pd2.product_id = p.product_id AND

pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start =

'0000-00-00' OR pd2.date_start <:13:00') AND="" (pd2.date_end="<" p="">

'0000-00-00' OR pd2.date_end > '2015-06-30 11:13:00')) ORDER BY pd2.priority

ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM

oc_product_special ps WHERE ps.product_id = p.product_id AND

ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR

ps.date_start <:13:00') AND="" (ps.date_end="0000-00-00" OR="" <="" p="">

ps.date_end > '2015-06-30 11:13:00')) ORDER BY ps.priority ASC, ps.price ASC

LIMIT 1) AS special FROM oc_product_to_category p2c LEFT JOIN oc_product p

ON (p2c.product_id = p.product_id) LEFT JOIN oc_product_description pd ON

(p.product_id = pd.product_id) WHERE p.status = '1' AND p2c.category_id =

'1913' GROUP BY p.product_id ORDER BY p.sort_order ASC, LCASE(pd.name) ASC

LIMIT 0,16

занимает 1.6 с.

Урезание запроса от рейтинга, скидок и тд. значительного ускорения не даёт,

дело в количестве товара.

Увеличение серверных мощностей, также не приводит к заметному ускорению.

Проблема возникает при большой посещаемости, когда несколько таких запросов

обрабатываются одновременно, время ответа БД увеличивается прогрессивно,

запросы продолжают накладываться, и скоро даже десятки других "бывших

мгновенных" SQL запросов занимают по 10-20 мин.

Видимо, нужно изменение взаимодействия с MySQL сервером - модернизация

структуры таблиц, и ядра магазина, для избавления от таких тяжёлых SQL

запросов.

Нужно, чтобы по завершении работы, всё части магазина с установленными

модулями работали без глюков.