Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Recommended Posts

Здравствуйте. Помогите пожалуйста, кто может, Долго грузятся прайсы с товарами, больше 12 000 шт., при загрузке большого кол-ва выкидывает с админки с ошибкой 504 Gateway Time-out.

Обнаружила медленные запросы, больше недели с одного IP ежедневно по 6-8 шт., время 6-9 секунд.

Один из:

SELECT (IF (LCASE(pd.name) LIKE '%goodyear ultra grip ice 2%'600) + IF (LCASE(pd.name) LIKE'goodyear%'800) + IF (LCASE(pd.name) LIKE '%goodyear%'80) + IF (LCASE(pd.name) LIKE 'ultra%'800) + IF (LCASE(pd.name) LIKE '%ultra%'80) + IF (LCASE(pd.name) LIKE 'grip%'800) + IF (LCASE(pd.name) LIKE'%grip%'80) + IF (LCASE(pd.name) LIKE 'ice%'800) + IF (LCASE(pd.name) LIKE '%ice%'80) + IF(LCASE(pd.name) LIKE '2%'800) + IF (LCASE(pd.name) LIKE '%2%'80) + IF (LCASE(pd.description) LIKE'%goodyear ultra grip ice 2%'200) + IF (LCASE(pd.description) LIKE '%goodyear%'20) + IF(LCASE(pd.description) LIKE '%ultra%'20) + IF (LCASE(pd.description) LIKE '%grip%'20) + IF(LCASE(pd.description) LIKE '%ice%'20) + IF (LCASE(pd.description) LIKE '%2%'20) + IF (LCASE(pd.tag)LIKE '%goodyear%'90) + IF (LCASE(pd.tag) LIKE '%ultra%'90) + IF (LCASE(pd.tag) LIKE '%grip%'90) + IF(LCASE(pd.tag) LIKE '%ice%'90) + IF (LCASE(pd.tag) LIKE '%2%'90)) AS relevance, p.product_id FROMoc_product p LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOINoc_product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN oc_product_attribute pa ON(p.product_id = pa.product_id) WHERE pd.language_id = '1' AND p.STATUS = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND ( (LCASE(pd.name) LIKE '%goodyear%') OR (LCASE(pd.name) LIKE'%ultra%') OR (LCASE(pd.name) LIKE '%grip%') OR (LCASE(pd.name) LIKE '%ice%') OR (LCASE(pd.name) LIKE'%2%') OR (LCASE(pd.description) LIKE '%goodyear%') OR (LCASE(pd.description) LIKE '%ultra%') OR(LCASE(pd.description) LIKE '%grip%') OR (LCASE(pd.description) LIKE '%ice%') OR (LCASE(pd.description)LIKE '%2%') OR (LCASE(pd.tag) LIKE '%goodyear%') OR (LCASE(pd.tag) LIKE '%ultra%') OR (LCASE(pd.tag) LIKE'%grip%') OR (LCASE(pd.tag) LIKE '%ice%') OR (LCASE(pd.tag) LIKE '%2%') OR (LCASE(pa.text) LIKE'%goodyear%' AND pa.language_id = '1' ) OR (LCASE(pa.text) LIKE '%ultra%' AND pa.language_id = '1' ) OR(LCASE(pa.text) LIKE '%grip%' AND pa.language_id = '1' ) OR (LCASE(pa.text) LIKE '%ice%' AND pa.language_id = '1' ) OR (LCASE(pa.text) LIKE '%2%' AND pa.language_id = '1' ) OR (LCASE(p.model) LIKE '%goodyear%') OR(LCASE(p.model) LIKE '%ultra%') OR (LCASE(p.model) LIKE '%grip%') OR (LCASE(p.model) LIKE '%ice%') OR(LCASE(p.model) LIKE '%2%') OR (LCASE(p.sku) = 'goodyear') OR (LCASE(p.sku) = 'ultra') OR (LCASE(p.sku) = 'grip') OR (LCASE(p.sku) = 'ice') OR (LCASE(p.sku) = '2') OR (LCASE(p.upc) = 'goodyear') OR (LCASE(p.upc) = 'ultra') OR (LCASE(p.upc) = 'grip') OR (LCASE(p.upc) = 'ice') OR (LCASE(p.upc) = '2') OR (LCASE(p.ean) = 'goodyear') OR (LCASE(p.ean) = 'ultra') OR (LCASE(p.ean) = 'grip') OR (LCASE(p.ean) = 'ice') OR (LCASE(p.ean)'2') OR (LCASE(p.jan) = 'goodyear') OR (LCASE(p.jan) = 'ultra') OR (LCASE(p.jan) = 'grip') OR (LCASE(p.jan) = 'ice') OR (LCASE(p.jan) = '2') OR (LCASE(p.isbn) = 'goodyear') OR (LCASE(p.isbn) = 'ultra') OR (LCASE(p.isbn) = 'grip') OR (LCASE(p.isbn) = 'ice') OR (LCASE(p.isbn) = '2') OR (LCASE(p.mpn) = 'goodyear') OR (LCASE(p.mpn) = 'ultra') OR (LCASE(p.mpn) = 'grip') OR (LCASE(p.mpn) = 'ice') OR (LCASE(p.mpn) = '2') ) GROUP BY p.product_id ORDER BY relevance DESCLCASE(pd.name) ASC LIMIT 0,30

id select_type table partitions type possible_keys key key_len ref rows filtered Extra  
1 SIMPLE p NULL ALL PRIMARY NULL NULL NULL 10089 3.33 Using where; Using temporary; Using filesort
1 SIMPLE p2s NULL eq_ref PRIMARY,store_id PRIMARY 8 diacar_db.p.product_id,const 1 100.00 Using index
1 SIMPLE pd NULL eq_ref PRIMARY,language_id PRIMARY 8 diacar_db.p.product_id,const 1 100.00 NULL
1 SIMPLE pa NULL ref PRIMARY PRIMARY 4 diacar_db.p.product_id 749 100.00 Using where
 

 

Вроде как, у некоторых таблиц не используются индексы и грубо сканирование идет. ПОМОГИТЕ установить правильно индексы или другие возможные варианты.

 

 

Что проделано:

Заказано на хостинке Memcache - не помогло.

Отключено Подсчет кол-ва товаров;

Отключено filterpro - не помогло.

 

 

Link to post
Share on other sites

Запросы такого плана LIKE '%goodyear%',  не делают выборку по индексам а шерстят всю таблицу перебором (вам это explain и показал)

 
Спойлер

 

1 SIMPLE p NULL ALL PRIMARY NULL NULL NULL 10089 3.33 Using where; Using temporary; Using filesort

 

 

 


Так что вам индексы здесь не помогут

Нужна полная оптимизация плюс установка Сфинкса

Готовьте бюджет ~ 9900 рублей (мин)

Link to post
Share on other sites

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

 

Link to post
Share on other sites
15 минут назад, markimax сказал:

 


Так что вам индексы здесь не помогут

Нужна полная оптимизация плюс установка Сфинкса

Готовьте бюджет ~ 9900 рублей (мин)

 

Cпасибо. Сама попробую, если нет - тогда....А то, что с одного ай пи идут запросы, не критично?

Link to post
Share on other sites

2 минуты назад, Mila80 сказал:

 

Cпасибо. Сама попробую, если нет - тогда....А то, что с одного ай пи идут запросы, не критично?

 

Кто ищет что то или кто то (конкуренты) сознательно ДдоСит узкое место вашего магазина чтобы его положить

Link to post
Share on other sites
2 minutes ago, Mila80 said:

 

Cпасибо. Сама попробую, если нет - тогда....А то, что с одного ай пи идут запросы, не критично?

6-8 в день это не много, если бы сотни тогда можно было бы подозревать какой-то парсинг или сбор информации конкурентами или еще что. 
а 6-8 в день спокойно может дать какой-то посетитель для поиска нужного товара. 

Link to post
Share on other sites
10 минут назад, sv2109 сказал:

6-8 в день это не много, если бы сотни тогда можно было бы подозревать какой-то парсинг или сбор информации конкурентами или еще что. 
а 6-8 в день спокойно может дать какой-то посетитель для поиска нужного товара. 

Да, 6-8 запросов, по 2 одинаковым товарам, ежедневно с одного ай пи. Удалила их.

Но, я не думаю, что из-за этого страдает скорость админ-панели при импорте. Так, что скорее всего нужна оптимизация.

Link to post
Share on other sites

50 minutes ago, freelancer said:

а как же FULLTEXT INDEX ?

он имеет свои недостатки, я поэтому его в своих модулях не использую, например в нем нету возможность нормально настроить релевантность по какой-то формуле
например он также не поддерживает поиск по вхождению внутри отдельного слова (то есть поиск будет идти по началу слова)
в нем нет поддержки русской морфологии
и так далее. 

Link to post
Share on other sites
Только что, sv2109 сказал:

он имеет свои недостатки, я поэтому его в своих модулях не использую, например в нем нету возможность нормально настроить релевантность по какой-то формуле
например он также не поддерживает поиск по вхождению внутри отдельного слова (то есть поиск будет идти по началу слова) и так далее. 

 

как же вы тогда ищите без LIKE и без match against? если это не коммерческая тайна разумеется

Link to post
Share on other sites
15 минут назад, freelancer сказал:

а как же FULLTEXT INDEX ?

Спасибо, с полнотекстовым поиском буду разбираться.

Странность в другом. Кол-во товара на сайте не менялось пару лет, никаких дополнений не вносилось. Кол-во посетителей возросло незначительно. Как могут 6-8 медленных запросов влиять так сильно на загрузку/обновление товаров на сайте. Я их вместе связала лишь с тем, что появились они в одно время (запросы и проблемы в импорте). 

Edited by Mila80
Link to post
Share on other sites

45 минут назад, freelancer сказал:

а как же FULLTEXT INDEX ?

Никак
При Like %... выборка идет без учета индексов - перебором всех записей в таблице

match against  тоже тормоза на больших базах
Полнотекстовый поиск в MySQL это тормоза еще те

Сфинкс частично решает проблему, если грамотно настроить

Link to post
Share on other sites
31 minutes ago, freelancer said:

 

как же вы тогда ищите без LIKE и без match against? если это не коммерческая тайна разумеется

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

 

30 minutes ago, Mila80 said:

 Как могут 6-8 медленных запросов влиять так сильно на загрузку/обновление товаров на сайте. Я их вместе связала лишь с тем, что появились они в одно время (запросы и проблемы в импорте). 


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

Link to post
Share on other sites
2 часа назад, sv2109 сказал:

Решений несколько: установить более быстрый модуль поиска, установить более мощный сервер, увеличить время выполнения скриптов на сервере.

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

вы этот запрос выполните на своём сервере и посмотрите сколько времени он отрабатывает

Link to post
Share on other sites

Вообще -то запрос немного не туда-сюда

Допусти он медленный

Но нагрузка и медленная работа совсем не связана с этим запросом (или подобным)

Если уж разбирать запрос, то спрашивается, зачем искать по "2" , релевантность в таком случае практически нулевая

 

Кто автор такого запроса?
 

Link to post
Share on other sites
2 часа назад, freelancer сказал:

на своём сервере

Запрос занял 6.4658 сек. 

Edited by Mila80
Link to post
Share on other sites

1 час назад, chukcha сказал:

Кто автор такого запроса?
 

Модуль поиска хоть и старой модификации, искал и ищет по сайту быстро, проблем не было еще неделю назад, а потом раз, и что-то пошло не так (существенных изменений на сайте не было) 

Link to post
Share on other sites

Спасибо всем, кто откликнулся - помогли. Медленные запросы прекратились после удаления модуля Поиска. Медленные запросы никак не связаны с ошибкой 504 при загрузке прайс-листов.

Link to post
Share on other sites

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

@Mila80 не подскажите модуль, который был причиной таким медленным запросам?

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

 

Link to post
Share on other sites

34 minutes ago, freelancer said:

@Mila80 не подскажите модуль, который был причиной таким медленным запросам?

это мой модуль, у пользователя стояла очень старая версия этого модуля, купленная лет 5 назад + модуль был не настроен правильно, так как был поиск по очень многим полям и по вхождению (а это влияет на скорость) и мин. длина слова для поиска судя по запросу стояла 1 символ, это добавляет в запрос поиск по напр. "2" что имеет мало смысла. И так далее. 

Link to post
Share on other sites
Just now, Mila80 said:

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

 

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

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Similar Content

    • By Speaker12
      Скачать/Купить дополнение


      Предварительный просмотр Google сниппета
      Данный модификатор поможет вам увидеть, как будет выглядеть поисковой сниппет в Google и Yandex.
      Данные для предварительного просмотра будут браться с полей:1. SEO URL2. Meta Tag Title3. Meta Tag Description
      Для работы данного модуля неважно какой редактор кода встроен на сайте. Данные берутся с поля input, textarea. 
       
      Адаптация требуется если в вашей админ панели сторонние модули изменяю страницу добавления - редактирования товара
      Добавил Speaker12 Добавлено 19.12.2021 Категория SEO, карта сайта, оптимизация Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3.0.2.4
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Не проверялось Обращение к серверу разработчика Нет  
    • By Speaker12
      Данный модификатор поможет вам увидеть, как будет выглядеть поисковой сниппет в Google и Yandex.
      Данные для предварительного просмотра будут браться с полей:1. SEO URL2. Meta Tag Title3. Meta Tag Description
      Для работы данного модуля неважно какой редактор кода встроен на сайте. Данные берутся с поля input, textarea. 
       
      Адаптация требуется если в вашей админ панели сторонние модули изменяю страницу добавления - редактирования товара
    • By so0EmFD190
      SET timestamp=1540805733;
      # Query_time: 1.707224  Lock_time: 0.000562  Rows_sent: 25  Rows_examined: 808258

      SELECT value_id, option_id, total FROM (SELECT p.manufacturer_id AS value_id, 'm' AS option_id, COUNT(p.manufacturer_id) AS total FROM oc_product p LEFT JOIN oc_product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p.status = '1' AND p2c.category_id = '82' AND p.product_id IN(SELECT oov2p1.product_id FROM oc_ocfilter_option_value_to_product oov2p1 INNER JOIN oc_ocfilter_option_value_to_product oov2p2 ON (oov2p1.product_id = oov2p2.product_id) WHERE oov2p1.option_id = '30425' AND (oov2p1.value_id = '1742734348' OR oov2p1.value_id = '2076164755') AND oov2p2.option_id = '30454' AND (oov2p2.value_id = '1093219734')) GROUP BY p.manufacturer_id UNION ALL SELECT p.stock_status_id AS value_id, 's' AS option_id, COUNT(p.stock_status_id) AS total FROM oc_product p LEFT JOIN oc_product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p.status = '1' AND p2c.category_id = '82' AND (p.manufacturer_id = '66') AND p.product_id IN(SELECT oov2p1.product_id FROM oc_ocfilter_option_value_to_product oov2p1 INNER JOIN oc_ocfilter_option_value_to_product oov2p2 ON (oov2p1.product_id = oov2p2.product_id) WHERE oov2p1.option_id = '30425' AND (oov2p1.value_id = '1742734348' OR oov2p1.value_id = '2076164755') AND oov2p2.option_id = '30454' AND (oov2p2.value_id = '1093219734')) GROUP BY p.stock_status_id UNION ALL SELECT oov2p.value_id, oov2p.option_id, COUNT(p.product_id) AS total FROM oc_ocfilter_option_value_to_product oov2p LEFT JOIN oc_product_to_category p2c ON (oov2p.product_id = p2c.product_id) LEFT JOIN oc_product p ON (oov2p.product_id = p.product_id) WHERE oov2p.value_id > '0' AND p.status = '1' AND p2c.category_id = '82' AND (p.manufacturer_id = '66') AND p.product_id IN(SELECT oov2p1.product_id FROM oc_ocfilter_option_value_to_product oov2p1 INNER JOIN oc_ocfilter_option_value_to_product oov2p2 ON (oov2p1.product_id = oov2p2.product_id) WHERE oov2p1.option_id = '30425' AND (oov2p1.value_id = '1742734348' OR oov2p1.value_id = '2076164755') AND oov2p2.option_id = '30454' AND (oov2p2.value_id = '1093219734')) GROUP BY oov2p.option_id, oov2p.value_id UNION ALL SELECT oov2p.value_id, oov2p.option_id, COUNT(p.product_id) AS total FROM oc_product p LEFT JOIN oc_product_to_category p2c ON (p.product_id = p2c.product_id) LEFT JOIN oc_ocfilter_option_value_to_product oov2p ON (p.product_id = oov2p.product_id) WHERE oov2p.option_id = '30425' AND p.status = '1' AND p2c.category_id = '82' AND (p.manufacturer_id = '66') AND p.product_id IN(SELECT oov2p1.product_id FROM oc_ocfilter_option_value_to_product oov2p1 WHERE oov2p1.option_id = '30454' AND (oov2p1.value_id = '1093219734')) GROUP BY oov2p.option_id, oov2p.value_id UNION ALL SELECT oov2p.value_id, oov2p.option_id, COUNT(p.product_id) AS total FROM oc_product p LEFT JOIN oc_product_to_category p2c ON (p.product_id = p2c.product_id) LEFT JOIN oc_ocfilter_option_value_to_product oov2p ON (p.product_id = oov2p.product_id) WHERE oov2p.option_id = '30454' AND p.status = '1' AND p2c.category_id = '82' AND (p.manufacturer_id = '66') AND p.product_id IN(SELECT oov2p1.product_id FROM oc_ocfilter_option_value_to_product oov2p1 WHERE oov2p1.option_id = '30425' AND (oov2p1.value_id = '1742734348' OR oov2p1.value_id = '2076164755')) GROUP BY oov2p.option_id, oov2p.value_id) results LIMIT 0, 25;
    • By leshavasykov
      Привет, помогите пожалуйста решить проблему с медленными запросами, хостинг выдает такой медленный запрос:
       
      SELECT p.product_id, (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 price FROM oc_product_discount pd2 WHEREpd2.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())) ORDERBY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM oc_product_special ps WHEREps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' ORps.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 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) WHERE pd.language_id = '1' AND p.STATUS = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' GROUP BY p.product_id ORDER BY(p.quantity>0) DESC,p.date_added DESC, LCASE(pd.name) DESC LIMIT 0,10
       
      Что это может значит и как можно убрать этот запрос? 
       
    • By Aky
      Как передать POST параметр через ajax в файл controller модуля OpenCart ?
       
      Есть модуль "latest"  Файл контроллера latest.php, нужно передать туда параметр width через Ajax/Jquery  
       
      Как обратится к этому файлу? 
       
      Как работать с Ajax знаю, как параметры передать знаю, как принять знаю, но как обратится к нужному файлу в OpenCart?
       
      При попытках обращения по "url:' скрипт выдает ошибку  "404 (not found)"
       
      Пробовал вот так:
      url: 'index.php?route=extension/module/latest',  url: 'index.php?route=module/latest',  url: '/catalog/controller/extension/module/latest',   
      Если перейти на прямую по ссылки: "/catalog/controller/extension/module/latest.php"  выдает ошибку HTTP ERROR 500
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.