Здравствуйте! Прошу помощи, уже несколько недель opencart 1.5.5.1 вешает мощный сервер. Включил на сервере лог медленных запросов и примерно понял в чем причина, но не знаю как исправить.
Сайт дорабатывался, из последнего, делали сортировку в категории с товарами такую: сначала отображаются товары в наличии, потом товары, которых нет в наличии.
Подозреваю что проблема либо в кривом коде, либо в большом количестве товара, с которыми не справляется сортировка и вешает mysql (около 4000 позиций) , и скорее всего проблемы идут из этого файла /catalog/model/catalog/product.php
Сервер вешается как только начинает расти посещаемость.
Помогите как исправить.
Лог медленных запросов mysql выдает следущее:
SELECT 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_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 < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT COUNT(*) AS total FROM oc_order_product op LEFT JOIN `oc_order` o ON (op.order_id = o.order_id) WHERE o.order_status_id > '0' AND op.product_id = p.product_id GROUP BY op.product_id) as topsellers FROM oc_product p LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' GROUP BY p.product_id ORDER BY p.date_added DESC LIMIT 16;
# User@Host: admin_db[admin_db] @ localhost []
# Thread_id: 824 Schema: admin_db QC_hit: No
# Query_time: 350.420148 Lock_time: 22.021837 Rows_sent: 16 Rows_examined: 31703240
SET timestamp=1456237211;
SELECT 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_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 < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT COUNT(*) AS total FROM oc_order_product op LEFT JOIN `oc_order` o ON (op.order_id = o.order_id) WHERE o.order_status_id > '0' AND op.product_id = p.product_id GROUP BY op.product_id) as topsellers FROM oc_product p LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' GROUP BY p.product_id ORDER BY p.date_added DESC LIMIT 16;
# User@Host: admin_db[admin_db] @ localhost []
# Thread_id: 821 Schema: admin_db QC_hit: No
# Query_time: 353.184947 Lock_time: 24.337040 Rows_sent: 16 Rows_examined: 31703240
SET timestamp=1456237211;
SELECT 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_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 < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT COUNT(*) AS total FROM oc_order_product op LEFT JOIN `oc_order` o ON (op.order_id = o.order_id) WHERE o.order_status_id > '0' AND op.product_id = p.product_id GROUP BY op.product_id) as topsellers FROM oc_product p LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' GROUP BY p.product_id ORDER BY p.date_added DESC LIMIT 16;
# User@Host: admin_db[admin_db] @ localhost []
# Thread_id: 809 Schema: admin_db QC_hit: No
# Query_time: 362.182525 Lock_time: 33.299391 Rows_sent: 16 Rows_examined: 31703240
SET timestamp=1456237211;
SELECT 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_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 < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT COUNT(*) AS total FROM oc_order_product op LEFT JOIN `oc_order` o ON (op.order_id = o.order_id) WHERE o.order_status_id > '0' AND op.product_id = p.product_id GROUP BY op.product_id) as topsellers FROM oc_product p LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' GROUP BY p.product_id ORDER BY p.date_added DESC LIMIT 16;
# User@Host: admin_db[admin_db] @ localhost []
# Thread_id: 822 Schema: admin_db QC_hit: No
# Query_time: 353.151940 Lock_time: 24.169539 Rows_sent: 16 Rows_examined: 31703240