Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Дикая нагрузка на БД без модулей


Vladislav565

Recommended Posts

Форумчане, нужна помощь.

 

Сделали сайт, товаров до сотни, начали наполнять и вросла нагрузка на БД в сотни раз до 300к cp  при лимите хостинга 2,5к. Отключил фильтр стало 250к cp

 

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

 

SELECT  p.`manufacturer_id`, 1 AS total FROM `oc_product` p  JOIN `oc_product_to_category` p2c ON (p.`product_id` = p2c.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` IN (87) AND (pov.`quantity` > 0)) tofv0 ON (p.`product_id` = tofv0.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` IN (152) AND (pov.`quantity` > 0)) tofv1 ON (p.`product_id` = tofv1.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` IN (195) AND (pov.`quantity` > 0)) tofv2 ON (p.`product_id` = tofv2.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` IN (202) AND (pov.`quantity` > 0)) tofv3 ON (p.`product_id` = tofv3.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` IN (292) AND (pov.`quantity` > 0)) tofv4 ON (p.`product_id` = tofv4.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` IN (408) AND (pov.`quantity` > 0)) tofv5 ON (p.`product_id` = tofv5.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` IN (518) AND (pov.`quantity` > 0)) tofv6 ON (p.`product_id` = tofv6.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` IN (524) AND (pov.`quantity` > 0)) tofv7 ON (p.`product_id` = tofv7.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` IN (527) AND (pov.`quantity` > 0)) tofv8 ON (p.`product_id` = tofv8.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` IN (536) AND (pov.`quantity` > 0)) tofv9 ON (p.`product_id` = tofv9.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` IN (537) AND (pov.`quantity` > 0)) tofv10 ON (p.`product_id` = tofv10.`product_id`) WHERE  p2c.`category_id` IN (17)  AND p.`status` = 1  GROUP BY p.`manufacturer_id`\G

 

 

SELECT SQL_CALC_FOUND_ROWS  p.* ,pd.* , NULL AS special ,p.`stock_status_id` AS stock_status ,  p.`price` AS price_sort ,0 AS rating,0 AS reviews  FROM  `oc_product` p  LEFT JOIN `oc_product_description` pd ON (p.`product_id` = pd.`product_id`)  JOIN `oc_product_to_category` p2c ON (p.`product_id` = p2c.`product_id`)  JOIN `oc_product_option_value` pov ON (p.`product_id` = pov.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` = 152 AND (pov.`quantity` > 0)) tofv1 ON (p.`product_id` = tofv1.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` = 175 AND (pov.`quantity` > 0)) tofv2 ON (p.`product_id` = tofv2.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` = 202 AND (pov.`quantity` > 0)) tofv3 ON (p.`product_id` = tofv3.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` = 204 AND (pov.`quantity` > 0)) tofv4 ON (p.`product_id` = tofv4.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` = 249 AND (pov.`quantity` > 0)) tofv5 ON (p.`product_id` = tofv5.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` = 299 AND (pov.`quantity` > 0)) tofv6 ON (p.`product_id` = tofv6.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` = 356 AND (pov.`quantity` > 0)) tofv7 ON (p.`product_id` = tofv7.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` = 362 AND (pov.`quantity` > 0)) tofv8 ON (p.`product_id` = tofv8.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` = 439 AND (pov.`quantity` > 0)) tofv9 ON (p.`product_id` = tofv9.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` = 519 AND (pov.`quantity` > 0)) tofv10 ON (p.`product_id` = tofv10.`product_id`)  JOIN (SELECT DISTINCT pov.`product_id` FROM `oc_product_option_value` pov WHERE pov.`option_id` = 16 AND pov.`option_value_id` = 534 AND (pov.`quantity` > 0)) tofv11 ON (p.`product_id` = tofv11.`product_id`)  WHERE  p2c.`category_id` = 17  AND pov.`option_id` = 16 AND pov.`option_value_id` = 88 AND (pov.`quantity` > 0) AND (pov.`quantity` > 0)  AND  p.`status` = 1   AND pd.`language_id` = 1  GROUP BY  p.`product_id`  ORDER BY   (p.`quantity` > 0)  DESC,  LCASE(pd.`name`)  LIMIT 0,15\G

 

Отключил две категории на сайте, которые начали наполнять (экипировка и запчасти) и нагрузка упала до нуля

 

Что может генерировать такую нагрузку и куда копать?

 

ocStore 2.3.0.2

 

Змінено користувачем Vladislav565
Надіслати
Поділитися на інших сайтах


5 минут назад, Vladislav565 сказал:

без него тоже нагрузка. я его отключил и в коде тоже убрал вывод 

Это однозначно фильтр.
И фильтр плохой!

Меняйте его хотя бы на мегафильтрпро или на ocfilter

 

Надіслати
Поділитися на інших сайтах

Согласен, SELECT в JOIN - достаточно ресурсоемкая операция, так как требует выборки по каждой вложенной записи, а у вас их на А4 хватит, учитывая перспективы данных таблиц.

Надіслати
Поділитися на інших сайтах

14 минут назад, drOC сказал:

Согласен, SELECT в JOIN - достаточно ресурсоемкая операция, так как требует выборки по каждой вложенной записи, а у вас их на А4 хватит, учитывая перспективы данных таблиц.


 

Цитата

Мишель! Не пори муру!
Мишель! Не помри с дурУ!


Что такое 1НФ? Можно ли реализовать 1НФ без JOIN?

Надіслати
Поділитися на інших сайтах

On 4/11/2020 at 5:43 PM, chukcha said:


 


Что такое 1НФ? Можно ли реализовать 1НФ без JOIN?

У вас симпатия к запросу? Я о вложенных селектах.

Змінено користувачем drOC
Надіслати
Поділитися на інших сайтах

18 минут назад, drOC сказал:

Я о вложенных селектах.

Где?

Вложенные SELECT это не самое плохое

 

 

18 минут назад, drOC сказал:

У вас симпатия к запросу?

Где вы это прочитали?

У меня больше претнзии к архитектуре запроса

К сожалению автор сего чуда не видит и не слышит..

А так-как это запрос фильтра, то тут без вложенных запросов можно обойтись, но.. перестроив модель
Поэтому
 

В 07.04.2020 в 21:10, snastik сказал:

И фильтр плохой!

Это правильный ответ.

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.