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

Ускорение обработки запросов mysql


 Поделиться

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

Здравствуйте, уважаемые форумчане. Пытаюсь разобраться с тормозами сайта на 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. Вот я не могу понять, с чем это может быть связано, ладно бы все старые товары имели много запросов, а то только некоторые и логики, какие из них будут с тормозами я не вижу...

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


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

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

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

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

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

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

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
Ссылка на комментарий
Поделиться на других сайтах

Ну, куда мне за вами гоняться? Не-не.. отключайте!
А я уж как нибудь за один прогон это увижу.

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

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

Ну, куда мне за вами гоняться? Не-не.. отключайте!
А я уж как нибудь за один прогон это увижу.

И я увижу быстрее. Но пользователь хочет сам.
Ему так будет логичнее понять.
Можно попробовать сначала с отключения ocmod - в
А потом связанные с товарами модули (понятное дело что SEO CMS и т п отключать не надо - он там не работает и не связан. Да и не выдает такое количество "лишних" запросов). А вот стоит обратить внимание на YO • Меню (первый подозреваемый), Mega Filter PRO, Акции, подарки, Группы товаров, Статусы Товаров PRO и т.п.
Кстати а микроразметка Microdata стоит ?

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

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

Ну, куда мне за вами гоняться? Не-не.. отключайте!
А я уж как нибудь за один прогон это увижу.

 

Я больше отношусь к продвинутым пользователям и более-менее знаю html и css. Но с php и sql я пока на Вы. Но ошибку мне надо найти, поэтому мне наверно больше подходит метод markimax:

20 минут назад, markimax сказал:

И я увижу быстрее. Но пользователь хочет сам.
Ему так будет логичнее понять.

Можно конечно и прогон сделать, если есть желание объяснить, как это делается...

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


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

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

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

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

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

Войти

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

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

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

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

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