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

[Решено] Очень долгий отклик сайта


qyyyyyy123

Recommended Posts

Добрый вечер!

Столкнулся с проблемой долгого отклика сайта на страницах которого отображеется 100 товаров за раз.

Получил ответ:

 

Проблема в работе сайта в настоящий момент заключается в слишком большом количестве однотипных MySQL-запросов, которые совершаются при единичном обращении к сайту. Рассмотреть можно на примере указанной Вами страницы: http://buy51.ru/index.php?route=product/category&path=4127_4142

На данной странице находится 100 элементов. Для обработки каждого из них к БД сайта осуществляется следующий запрос:

SELECT COUNT(DISTINCT p.product_id) AS total FROM oc_category_path cp LEFT JOIN oc_product_to_category p2c ON (cp.category_id = p2c.category_id) 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) 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 <= '2015-10-31 04:34:00' AND p2s.store_id = '0' AND cp.path_id = '4209'
+-------+
| total |
+-------+
| 154 |
+-------+
1 row in set (0.80 sec)

Благодаря структуре запроса, для обработки каждого такого запроса производится проверка всех подобных элементов, добавленных в базу данных. Если сократить указанный запрос до простого отображения уникальных элементов, можно получить следующий вывод:

explain SELECT COUNT(DISTINCT p.product_id) FROM oc_product p;
+----+-------------+-----

--+-------+---------------+---------+---------+------+-------+-------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+------+-------+-------------------------------------+
| 1 | SIMPLE | p | range | PRIMARY | PRIMARY | 4 | NULL | 37475 | Using index for group-by (scanning) |
+----+-------------+-------+-------+---------------+---------+---------+------+-------+-------------------------------------+
1 row in set (0.00 sec)

Как видно, индексы в таблицу добавлены, однако благодаря конструкции "COUNT(DISTINCT" в запросе, данные индексы не используются, в связи с чем для обработки одного товара на странице происходит проверка 37475 уникальных значений.

С нашей стороны для решения проблемы можем Вам группировать значения из cp.path_id, т.к. именно они и являются уникальными для каждого запроса. К примеру, сделать это можно так:

SELECT cp.path_id, COUNT(DISTINCT p.product_id) AS total FROM oc_category_path cp LEFT JOIN oc_product_to_category p2c ON (cp.category_id = p2c.category_id) 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) 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 <= '2015-10-31 04:34:00' AND p2s.store_id = '0' AND cp.path_id IN ('4209', '4251', '4461', '4619') group by cp.path_id;
+---------+-------+
| path_id | total |
+---------+-------+
| 4209 | 154 |
| 4251 | 54 |
| 4461 | 22 |
| 4619 | 14 |
+---------+-------+
4 rows in set (0.82 sec)

Как можно видеть, запросы были выполнены приблизительно за одно из то же время, однако во втором случае запрос был выполнен одновременно для четырех уникальных значений. Таким образом, корректно сгруппировав запросы можно будет добиться оптимальной работы сайта.

 

Как можно решить данную проблему?

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


Версия?

 

Подсчет количества может происходить в разных местах

Например в модуле категорий

В меню на главной

В контроллере категорий.

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

опенкарт Версия 1.5.5.1.2

Подсчет количества товаров я отключал через Настройки

Тут:

Количество товаров в подкатегории:
Показать количество товаров в подкатегории в категории меню заголовка магазина. Будьте осторожны, это может вызвать излишнюю нагрузку в производительности для магазинов с большим количеством подкатегорий

 

PS данная проблема появилась недавно, до этого сайт стабильно работал целый год.

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


опенкарт Версия 1.5.5.1.2

Подсчет количества товаров я отключал через Настройки

опенкарт или окстор? во втором в этом запросе должно быть изменение под кеширование, правда помоему на минуту

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

И снова здравствуй Journal :ugeek:

Как сказал chukcha  у авторов journal большая проблема с меню

Ну неужели нельзя было сделать всего одну настройку - "не считать количество товаров в категории" в своем модуле меню

Это же самое известное узкое горлышко opencart

Я не понимаю... они сделали куча настроек каждой "рюшечки", и не сделали важную архитектурную настройку

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

что характерно:

есть шаблон, платный

у шаблона есть поддержка авторов

 

по какой причине вопросы по шаблону не задаются авторам, а здесь на форуме?

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

AlexDW  :)

Вы, не знаете как эти "индейцы" посылают пользователей?  Я сам 1000 раз писал в тех. поддержку официально купленных тем... ни ответа, ни привета, на конкретные обоснованные вопросы разработчиков.

Даже указывал как ошибки исправить им же... и в новых версиях, те же грабли

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

 

Поэтому всем рекомендую темы (и модули тоже) с форума. Здесь все разработчики четко реагируют

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

я больше про другое

как только поднимается вопрос "а покупалась ли тема", 95% спрашивающих пропадают либо начинают рассказывать про наследство любимого дедушки из Нигерии и тп ;)

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

я больше про другое

как только поднимается вопрос "а покупалась ли тема", 95% спрашивающих пропадают либо начинают рассказывать про наследство любимого дедушки из Нигерии и тп ;)

Значит я вхожу в 5% которые ее всетаки купили)

http://rghost.ru/6jPnVFLrD.view

 

Прежде чем задать вопрос разрабам джернала, я хотел понять в чем проблема что-бы им все это обьяснить через переводчик(

 

Вот ответ от Journal

 

Hi, this is not related to the theme, but if you want to turn off the product count look in System > Settings > Edit > Option > Category Product Count.

 

Но и он мне не помог долгий отклик как был так и остался(

Помогите сформулировать вопрос к Mario что-бы он помог мне с моей проблемой.

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


Значит я вхожу в 5% которые ее всетаки купили)

Уважаем такую культуру

Далее...

Подкатегории видно в списке тормозят (там еще подсчет есть) - это уже не тема

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

Как думаете может ли помочь мне этот способ?

https://opencartforum.com/topic/1348-tormozit-uzhasno-resheno/

 

Есть ли риск что сайт упадет с концами?

 

На сайте более 1000 подкатегорий.

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


Как думаете может ли помочь мне этот способ?

https://opencartforum.com/topic/1348-tormozit-uzhasno-resheno/

 

Есть ли риск что сайт упадет с концами?

 

На сайте более 1000 подкатегорий.

 

Хороших разработчиков на форуме много - советую кого нибудь нанять для устранения проблемы.

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

Хороших разработчиков на форуме много - советую кого нибудь нанять для устранения проблемы.

Если за пару дней не смогу самостоятельно решить проблему то так и поступлю.

Только не знаю на какой бюджет расчитывать в решении моей проблемы?

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


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

вам уже без разницы, а гражданам с аналогичной проблемой в будущем это может помочь ;)

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

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

вам уже без разницы, а гражданам с аналогичной проблемой в будущем это может помочь ;)

Ostore Версия 1.5.5.1.2

Шаблон: Journal 2.5

На сайте 35к товаров и более 1500 категорий и под категорий.

 

Собственно вот что мне помогло:

1. В контроллерах убрал расчет количества товара в категории

catalog/controller/product/category.php

catalog/controller/common/header.php

 $product_total = $this->model_catalog_product->getTotalProducts($data);

изменил на

$product_total = 0;

 

2.включил кэширование модулей journal2

Вот и все!) сайт летает.

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


  • 4 weeks later...

извините за тупой вопрос, но этот способ применим для Opencart 2.0.2.0 ?
в фале catalog/controller/product/category.php нашел строчку $product_total
а в файле catalog/controller/common/header.php- нет $product_total
 

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


  • 4 weeks later...

...

Собственно вот что мне помогло:...

Спасибо, помогло! Сайт реально залетал)) Посмотрю завтра нагрузку на базу :-) Змінено користувачем afwollis
Надіслати
Поділитися на інших сайтах


Но ведь это неправильное решение

Как минимум нужно было добавить условие

if ($this->config->get('config_product_count'))
Посмотрите вот на гитхабе к примеру 

https://github.com/myopencart/ocStore/blob/master/catalog/controller/common/header.php

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

Но ведь это неправильное решение

Как минимум нужно было добавить условие

if ($this->config->get('config_product_count'))
Посмотрите вот на гитхабе к примеру 

https://github.com/myopencart/ocStore/blob/master/catalog/controller/common/header.php

 

Спасибо за ссылку, а $product_total = 0; при этом же остается?

Что касается нагрузки на БД,  то вот график http://joxi.ru/823kR3qf6JNn42 на 23-00 114 процессорных минут и за сегодня, не одного медленного запроса.

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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