Перейти к содержанию

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

Здравствуйте, уважаемые форумчане. Пытаюсь разобраться с тормозами сайта на ocStore 2.1.0.1 (на сайте примерно 3000 товаров) Решил проверить скорость и количество запросов у себя на сайте и вот какие данные получил для главной страницы:server_time.PNG

 

Анализ запросов к базе данных дал такие результаты (при чистом кєше):  Queries: 918, Total time: 734.030 ms

А вот самые медленные запросы:

sql_zapros.PNG

Подскажите, количество запросов 918 - это очень много? И как можно сократить время этих запросов? (индексы таблицам проставлены). Ткните носом, в каком направлении копать?

Поделиться сообщением


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

Много

А какие модули стоят ?

Поделиться сообщением


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

Чего стоит только один запрос считающий количество проданного товара

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, markimax сказал:

Много

А какие модули стоят ?

Да уж много модулей стоит: SeoGen 2.0.5, Image Manager Pro+, SORTS+, SEO CMS (+мультиязык), Magic Zoom Plus, SOFORP SMS Информер, After Purchase Review Invitation, Email Template - Advanced, GeoIP, Mega Filter PRO, Rev Slider Opencart, YO • Меню, Акции, подарки [sv2109.com], Группы товаров ( louise170 ), Модуль Настройки заказов ( Alex.Konushin ), Поиск с вариантами [sv2109.com], Поиск с морфологией и релевантностью PRO [sv2109.com], Простая регистрация и заказ Simple, Статусы Товаров PRO [sv2109.com], Оплата после проверки и/или оплата на реквизиты, Доставка Плюс ( louise170 ), Новая Почта API, Менеджер скидок/наценок ( louise170), Система поощрения и лояльности клиентов ( sergius_sv ), а так же мод, изменяющий кнопку купить в зависимости от состояния на складе.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, nikifalex сказал:

какой именно кэш чистый?

Имел ввиду - почистил системный кэш и кэш изображений движка и кэш браузера

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, Dimdimych сказал:

Имел ввиду - почистил системный кэш и кэш изображений движка и кэш браузера

Приходите ко мне в личку.
Долго Дорого Хорошо!

Поделиться сообщением


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

Мне вот не понятна такая ситуация: есть некоторые товары, которые ну ооочень долго грузятся. Если обычно у товара Queries: 475, Total time: 574.206 ms , то у некоторых товаров  Queries: 1885, Total time: 4,281.468 ms. Причем специально создавал новый товар с контентом и настройками, как у тормознутого товара и у этого товара было намного меньше запросов. Я вручную переносил базу данных с 1.5 на 2.1 и заметил, что попадаются такие тормознутые товары (их не так много) только созданные еще на 1.5. Вот я не могу понять, с чем это может быть связано, ладно бы все старые товары имели много запросов, а то только некоторые и логики, какие из них будут с тормозами я не вижу...

Поделиться сообщением


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

Ну так залогировать сами запросы а не только  количесвто и время.

Поделиться сообщением


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

Да полюбому два меню категорий с дофига пунктами. И всякая ересь со списками товаров в виде карусели

Поделиться сообщением


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

отключать-включать-мерить время-сравнивать-искать-оптимизировать. и там как повезет.

Очень мало модуле-писателей пробовали с 3000 товаров

Поделиться сообщением


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

Отключайте по очереди модули связанные с товарами и смотрите результат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, nikifalex сказал:

отключать-включать-мерить время-сравнивать-искать-оптимизировать. и там как повезет.

Очень мало модуле-писателей пробовали с 3000 товаров

чтоб понимать что такой запрос будет тяжелым а в цикле тем более, прописывать LIMIT если изначально известна размерность выборки, использовать собственные модели, ... не нужно пробовать на 3000

да и в целом 3000 это смешная цифра для разговора о нагрузках из-за кол-ва

Поделиться сообщением


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

Просмотрел лог запросов - большая часть - это однотипные запросы  по 3-4 мс типа:

SELECT DISTINCT *, pd.name AS name, p.image, (SELECT md.name 
FROM oc_manufacturer_description md 
WHERE md.manufacturer_id = p.manufacturer_id AND md.language_id = '1') AS manufacturer, (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 < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) 
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 < 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 points 
FROM oc_product_reward pr 
WHERE pr.product_id = p.product_id AND customer_group_id = '1') AS reward, (SELECT ss.name 
FROM oc_stock_status ss 
WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '1') AS stock_status, (SELECT wcd.unit 
FROM oc_weight_class_description wcd 
WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '1') AS weight_class, (SELECT lcd.unit 
FROM oc_length_class_description lcd 
WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '1') AS length_class, (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 COUNT(*) AS total 
FROM oc_review r2 
WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order 
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) 
LEFT JOIN oc_manufacturer m ON (p.manufacturer_id = m.manufacturer_id) 
WHERE p.product_id = '1674' AND pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0'

Меняется только p.product_id = '1674'. 

Поделиться сообщением


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

и сколько их? Кто-то зачем-то по одному товару дергает. Сколько же их на странице то?

Поделиться сообщением


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

Ну, так наверное огромная куча связанных товаров

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Otvet сказал:

да и в целом 3000 это смешная цифра для разговора о нагрузках из-за кол-ва

Число то смешное, но, как правильно было сказано, большинство разработчиков модулей не подозревают, что в магазинах бывает больше пары сотен товаров. Да и сам Дэниэль об этом не особо думает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
44 минуты назад, nikifalex сказал:

и сколько их? Кто-то зачем-то по одному товару дергает. Сколько же их на странице то?

 

34 минуты назад, chukcha сказал:

Ну, так наверное огромная куча связанных товаров

Сопутствующих товаров у рассматриваемого товара - 8 шт. А запросов, блин, я даже сразу не сосчитаю, но на вид 60-70% от 1885 запросов...

Изменено пользователем Dimdimych

Поделиться сообщением


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

Ну так ищите источник!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, chukcha сказал:

Ну так ищите источник!!!

А искать, как markimax предлагал?

3 часа назад, markimax сказал:

Отключайте по очереди модули связанные с товарами и смотрите результат

 

Поделиться сообщением


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

Зачем?

 

Искать какой модуль вызывает запрос, а не только смотреть запрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
10 минут назад, Dimdimych сказал:

Отключайте по очереди модули связанные с товарами и смотрите результат

Это очень затруднительно.. и глупо, если можно ускорить процесс обнаружения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, chukcha сказал:

Это очень затруднительно.. и глупо, если можно ускорить процесс обнаружения.

А каким образом можно ускорить процесс обнаружения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
14 минут назад, Dimdimych сказал:

А запросов, блин, я даже сразу не сосчитаю, но на вид 60-70% от 1885 запросов...

Это стандартный запрос на выборку товара (метод getProduct в /catalog/model/catalog/product.php), так что этих запросов и должно быть много (имею ввиду запрос из этого поста:

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

 

Если запросов больше, чем должно быть, ищите места использования getProduct.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
29 минут назад, chukcha сказал:

Это очень затруднительно..

Это почему же ? Да еще с таким "громким" заявлением
Да я бы нашел быстрее, как и любой профессионал.
Но если у пользователя нет квалификации ему надо подсказать путь, какой ему проще.
Отключаешь модуль и смотришь количество запросов - логично и просто.
Если после какого то модуля резко упадет количество запросов - тот  и "папа"
 

  • +1 1

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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