Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Медленные запросы


 Поделиться

Рекомендованные сообщения

Добрый день! Помогите понять что это за медленные запросы и как можно сделать их загрузку быстрее. 

SELECT op.product_id, SUM(op.quantity) AS total FROM oc_order_product op LEFT JOIN `oc_order` o ON (op.order_id = o.order_id) LEFT JOIN `oc_product` p ON (op.product_id = p.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN oc_product_to_category p2c ON (p.product_id = p2c.product_id) WHERE o.order_status_id > '0' AND p2c.category_id IN (196) AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' GROUP BY op.product_id ORDER BY total DESC LIMIT 8
SELECT *,COUNT(`product_id`) AS rating FROM oc_order_product WHERE order_id IN(SELECT op.`order_id` FROM (SELECT *,COUNT(`order_product_id`) AS totalpr FROM oc_order_product GROUP BY `order_id` ) AS src LEFT JOIN `oc_order_product` AS op ON (src.`order_id` = op.`order_id`) WHERE src.totalpr > 1 AND op.`product_id` IN ('598')) AND `product_id` NOT IN ('598') GROUP BY `product_id` ORDER BY rating DESC LIMIT 6

Спасибо 

Ссылка на комментарий
Поделиться на других сайтах


Индексы установить на product_id order_id 

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

Первый запрос:
Дай восемь id товаров, и количество продаж для  самых продаваемых товаров для всех активных, включенных товаров из категории 196 главного магазина со store_id=0 и отсортируй список по количеству продаж.
В общем выборка 8-ми самых продаваемых товаров из определенной категории.

Во втором запросе какая-то тарабарщина для товара с ID 598 (похоже что считает количество продаж). Не уверен. Не стал вникать :)

Вы б лучше сказали что Вам нужно, и тогда можно подсказать как это сделать )

Ну и для оптимизации запросов с джоинами желательно индексировать группы полей. Да, размер БД слегка (иногда и не слегка) увеличится, но даст прирост в производительности.

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

28.07.2022 в 15:41, nogocuHoBuk сказал:

Первый запрос:
Дай восемь id товаров, и количество продаж для  самых продаваемых товаров для всех активных, включенных товаров из категории 196 главного магазина со store_id=0 и отсортируй список по количеству продаж.
В общем выборка 8-ми самых продаваемых товаров из определенной категории.

Во втором запросе какая-то тарабарщина для товара с ID 598 (похоже что считает количество продаж). Не уверен.

Вы б лучше сказали что Вам нужно, и тогда можно подсказать как это сделать )

Ну и для оптимизации запросов с джоинами желательно индексировать группы полей. Да, размер БД слегка (иногда и не слегка) увеличится, но даст прирост в производительности.

У меня после переноса сайта, что-то дает большую нагрузку на базу и сайт постоянно падает. Может часами не загружаться. Сейчас пытаюсь найти причину этих падений и дошел до медленных запросов... 

 

Ссылка на комментарий
Поделиться на других сайтах


В oc_order_product добавьте индексы для product_id и quantity
ну и можно создать общий индекс, как написал 
@buslikdrev для product_id order_id

Ссылка на комментарий
Поделиться на других сайтах

28.07.2022 в 15:48, nogocuHoBuk сказал:

В oc_order_product добавьте индексы для product_id и quantity
ну и можно создать общий индекс, как написал 
@buslikdrev для product_id order_id

Спасибо большое, добавил индексы, но проблема оказалась не в этом. Сайт все равно лежит (

Ссылка на комментарий
Поделиться на других сайтах


28.07.2022 в 16:01, Ch0oJoy сказал:

Сайт все равно лежит (

У Вас эти запросы в хедере чтоли? Просто непонятно как запрос продаваемых товаров может "уложить", например, страницу контактов.
Или под "лежит" Вы понимаете определенные страницы?

Ссылка на комментарий
Поделиться на других сайтах

28.07.2022 в 16:04, nogocuHoBuk сказал:

У Вас эти запросы в хедере чтоли? Просто непонятно как запрос продаваемых товаров может "уложить", например, страницу контактов.
Или под "лежит" Вы понимаете определенные страницы?

Я не уверен что именно эти запросы нагружают базу, если их мы исправили добавлением индекса, то значит проблема в чем-то еще. Хотя медленных запросов показывает 20 тис шт. 

Прийдется дальше искать. 

Сайт по 10-20 минут может не загружаться. Вчера 6 часов не работал. Хостер говорит нагрузка в базе. 

 

Ссылка на комментарий
Поделиться на других сайтах


Кстати. МОжет Вас просто ДДосят? Отсюда и нагрузка.
В момент падения сайта добавьте в htaccess
 

Order Allow,Deny
Deny from all
Allow from ВАШ_IP_АДРЕС

И если сайт в течение минуты оживёт (естественно только для Вас) - настраивайте cloudflare. 

  • +1 2
Ссылка на комментарий
Поделиться на других сайтах

В 28.07.2022 в 16:14, nogocuHoBuk сказав:

Кстати. МОжет Вас просто ДДосят? Отсюда и нагрузка.

Або "ботять" пошукові роботи

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

28.07.2022 в 16:14, nogocuHoBuk сказал:

Кстати. МОжет Вас просто ДДосят? Отсюда и нагрузка.
В момент падения сайта добавьте в htaccess
 

Order Allow,Deny
Deny from all
Allow from ВАШ_IP_АДРЕС

И если сайт в течение минуты оживёт (естественно только для Вас) - настраивайте cloudflare. 

 

28.07.2022 в 16:15, markimax сказал:

Або "ботять" пошукові роботи

Спасибо, это еще не пробовал. 

Попробую теперь с ботами разобраться

Ссылка на комментарий
Поделиться на других сайтах


В 28.07.2022 в 16:29, Ch0oJoy сказав:

 

Спасибо, это еще не пробовал. 

Попробую теперь с ботами разобраться

Бо наскільки я пам'ятаю у вас на тестовому (піддомен) все літало.
А як на бойовий перемістили то "почалося"

Ссылка на комментарий
Поделиться на других сайтах

28.07.2022 в 16:37, markimax сказал:

Бо наскільки я пам'ятаю у вас на тестовому (піддомен) все літало.
А як на бойовий перемістили то "почалося"

Да, после переноса прошло 2-3 часа как он нормально поработал, а потом перестал загружаться. 

Сейчас моментами работает, потом может опять на 10-30 минут перестать грузится. 

Ссылка на комментарий
Поделиться на других сайтах


может впс или хостинг убогий?

или сервак настроен криво...

Сколько у вас товаров и категорий в магазе?

 

Ссылка на комментарий
Поделиться на других сайтах

28.07.2022 в 16:48, max1985 сказал:

может впс или хостинг убогий?

или сервак настроен криво...

Сколько у вас товаров и категорий в магазе?

 

Товаров 2.5к, а категорий около 20

 

Я не думаю, так как демо сайт работал отлично и основной сайт до смены шаблона тоже 1 год работал без проблем. 

 

Сейчас заблокировал полностью яндекс ботов и в гугл поставил ограничения, буду наблюдать. 

 

 

Ссылка на комментарий
Поделиться на других сайтах


28.07.2022 в 16:55, Ch0oJoy сказал:

Товаров 2.5к, а категорий около 20

ничего критичного даже для хостинга

28.07.2022 в 16:55, Ch0oJoy сказал:

до смены шаблона

Если после смены шаблона начал тупить, смотрите в сторону модулей которые идут в шаблоне и включены, может они все портят... Или какой-то вывод товаров в шаблоне за мудреный, например рекомендуемые в карточке товара...

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

Это у вас какой-то модуль типа хиты продаж

но надо просто разобраться что это за жесть такая 

 

COUNT(`product_id`) AS rating FROM oc_order_product WHERE order_id IN(SELECT op.`order_id` FROM (SELECT *,COUNT(`order_product_id`) AS totalpr

 

  • +1 3
Ссылка на комментарий
Поделиться на других сайтах

В 28.07.2022 в 17:17, max1985 сказав:

 например рекомендуемые в карточке товара...

Наскільки пам'ятаю є такє "діло" у Ch0oJoy

Я теж грішу на "рекомєндуємиє", бо зазвичай там чудять з запитами до БД

Ссылка на комментарий
Поделиться на других сайтах

В 28.07.2022 в 17:19, spectre сказав:

Это у вас какой-то модуль типа хиты продаж

но надо просто разобраться что это за жесть такая 

 

COUNT(`product_id`) AS rating FROM oc_order_product WHERE order_id IN(SELECT op.`order_id` FROM (SELECT *,COUNT(`order_product_id`) AS totalpr

 

Це точно жесть, а не запит
Куча COUNT, потім в IN Select ...з COUNT ...
Там мабуть перебор всієї таблиці

Ссылка на комментарий
Поделиться на других сайтах

28.07.2022 в 17:19, spectre сказал:

Это у вас какой-то модуль типа хиты продаж

но надо просто разобраться что это за жесть такая 

 

COUNT(`product_id`) AS rating FROM oc_order_product WHERE order_id IN(SELECT op.`order_id` FROM (SELECT *,COUNT(`order_product_id`) AS totalpr

 

 

28.07.2022 в 17:19, markimax сказал:

Наскільки пам'ятаю є такє "діло" у Ch0oJoy

Я теж грішу на "рекомєндуємиє"

Есть модуль на сайте "Товары в табах" и в нем можно выбрать товары категории (по кол. продаж или по просмотрам и тд). Раньше стояло по кол. продаж, но после изменения на кол. просмотров, сайт стал намного лучше грузится. Но как видно с панели хостинга медленные запросы все равно остались. 

 

так же есть и Рекомендуемые, но протестировать их отключение смогу когда сайт опять зависнет. После того как заблокировал ботов, сайт работает хорошо. Надеюсь и дальше так будет) 

 

Ссылка на комментарий
Поделиться на других сайтах


28.07.2022 в 17:29, Ch0oJoy сказал:

Есть модуль на сайте "Товары в табах"

Проще все подобные запросы (тяжелые) повесить на крон (например раз в час, в зависимости от продаж. ВОзможно Вам и раз в сутки хватит) и писать результаты в отдельную таблицу, например 
oc_product_rating
Ну и модулем уже дёргать не из всей базы, нагружая её перебирая все товары и заказы, а брать рассчитанные значения непосредственно из таблицы.

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

28.07.2022 в 16:29, Ch0oJoy сказал:

После того как заблокировал ботов,

Поисковых? Ненужно.

Ссылка на комментарий
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.