Нагрузки ^_^ Opencart 2102 + корявый htacces

Тема в разделе "Общие вопросы", создана пользователем KirillKern, 21 мар 2017.

  1. KirillKern

    KirillKern Активный пользователь

    Сообщения:
    102
    Симпатии:
    34
    Друзья, выручайте )

    Снимок.PNG

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

    Сайт давно уже перехал с 1,5 на 2102 местную. И относительно недавно стал переeзжать на https.


    В общем и целом на этом тарифе я давно, на этом домене тоже(по сути он сменился на https, но всё же).
    Боты запрашивают не миллионы и даже не тысячи страниц в час. Мой товарищ настаивает на том, что вина в ботах(бинк, майл, яша, гугл подрубаются, действительно чаще посетителей, коих в день 700-800).

    Нагрузка по базе относительно не изменилась
    Снимок.PNG

    Но у меня разгорается от такового вот лога долгих запросов в MySQL

    >>>> вырезано, перенесено в следующее сообщение


    В силу того, что от ботов, по понятным причинам, зашториваться не охотj. А знания мои в MySQL ограничиваются однострочными запросами(как правило, в гугл), прошу хелпа в вопросе оптимизации оных.

    Я так и не понял с чем именно проблема, с тем что сайтмап генерируется на лету (на лету? коробочный гугл сайтмап),или с тупизмом в самих запросах.


    Страница продукта как таковая и вне каких-то шоковых ситуаций генерируется и загружается практически моментально (1-2 сек, по gtmetrix), но когда ловит эти 1000 ms - посетитель натыкается на >110секунд ожидания


    Заранее благодарен.
     
    Последнее редактирование: 21 мар 2017
  2. KirillKern

    KirillKern Активный пользователь

    Сообщения:
    102
    Симпатии:
    34
    Страница:/index.php?route=feed/google_sitemap
    Источник:domain/public_html/catalog/model/catalog/product.php
    Время выполнения: 25.66мс

    SELECT DISTINCT *, pd.name AS name, p.image, m.name 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 = '136' AND pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0'

    ----------------------

    Страница:/
    Источник:domain/public_html/catalog/model/catalog/product.php
    Время выполнения: 19.3мс

    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 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 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.date_added DESC, LCASE(pd.name) DESC LIMIT 0,16

    ----------------------


    Страница:/
    Источник:domain/public_html/catalog/model/catalog/product.php
    Время выполнения: 16.83мс

    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 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 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.date_added DESC, LCASE(pd.name) DESC LIMIT 0,16

    ----------------------

    Страница:/index.php?route=feed/google_sitemap
    Источник:domain/public_html/catalog/model/catalog/product.php
    Время выполнения: 18.58мс

    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 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 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.sort_order ASC, LCASE(pd.name) ASC

    ----------------------

    Страница:/index.php?route=feed/google_sitemap
    Источник:domain/public_html/catalog/model/catalog/product.php
    Время выполнения: 1000.84мс

    *тут такой же как первый, сменился только id товара"

    ----------------------

    Страница:/index.php?route=feed/google_sitemap
    Источник:domain/public_html/catalog/model/catalog/product.php
    Время выполнения: 1001.04мс

    *тут такой же как первый, сменился только id товара"

    ----------------------

    Страница:/
    Источник:domain/public_html/catalog/model/catalog/product.php
    Время выполнения: 17.51мс

    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 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 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.date_added DESC, LCASE(pd.name) DESC LIMIT 0,16
     
  3. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    Google Sitemap если штатный, то может и создавать нагрузку. Все же лучше не генерировать каждый раз, а кешировать итд.
    Всяческих генераторов сайтмап которые не создают нагрузку хватает.

    Далее. Бытует мнение (не силен в теории этого вопроса), что шифрование трафика создает дополнительную нагрузку на процессор, что и влияет на тариф. Когда поднялась шумиха вокруг https везде писали, что возрастут затраты из за покупки сертификата и смены тарифа из за возросшей нагрузки.
     
  4. KirillKern

    KirillKern Активный пользователь

    Сообщения:
    102
    Симпатии:
    34
    вырубил стоковый сайтмапгенератор под гугла... пока рано, говорить, но нагрузка вроде как снизилась... upd: ничерта не снизилась
    не посоветуете фришного сайтмапгенератора с кэшем ?

    понятно что гугл в помощь, но уже столько говна всякого перелопатил, что щас ещё глубже закопаюсь, по-моему (


    очень мало инфы по оптимизации запросов в двойке, такой проблемы нет ? не стоит её рассматривать ?
    если под полуторку это пологовно едва ли не решение всех проблем... то с двойкой такого объёма инфы нет
    (индексы добавлены уже все какие только можно)
     
  5. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
  6. KirillKern

    KirillKern Активный пользователь

    Сообщения:
    102
    Симпатии:
    34
    блин... кэшеры это ничерта не выход по-моему...
    понятно, что когда плавно всё это дело растёт - мошт и вариант...
    но когда у тебя резко забомбило, на сайте, которому не первый год...
    ну блин... это косяк разраба, того мудака, который чо-то накосячил с кодом (все обернулись на меня?)...

    Снимок.PNG



    где то я находил этот модуль уже...
    ща два скрина скину, посмеётесь

    а... щас уже не так смешно..но ночью у них за4е секунды было...
    понятно что у меня уже чо-то там где-то подпилено, да выпелено.. но у меня на лету всё

    moy.PNG nemoy.PNG
     
    Последнее редактирование: 21 мар 2017
  7. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    Кешер как минимум должен снизить нагрузку.
    Вы вот в спойлере статистику давали. Но вот там не хватает данных по кол-ву запросов. Может один нагруженный процесс долбится 1000 в час.. вот и нагрузка. Тем более показали вы время, но информации по нагрузки на cpu нету.
    В любом случаи, мне кажется https дал свои результаты по нагрузки. Не зря же пишут об этом?
     
  8. KirillKern

    KirillKern Активный пользователь

    Сообщения:
    102
    Симпатии:
    34
    да. отсутствие временной метки косяк мода логирования, не до допилов сейчас.

    хостарь божитсться, что https не при делах..

    кэшер, да. понятно, нагрузку снизит, но сколько я с мультиязычником/мультивалютником с ними нае6*ался... что ставить кэшеры желание отбило...

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

    вот стата с отрубленной гуглсайтмапой и с костылём, о котором напишу под скрином
    Снимок.PNG

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

    сеопро у меня при обращении на адрес с заглавной буквой возвращает 404... я хз почему так...у меня ещё параллельно куча проблем с редиректами (различные модули менеджеры редиректов просто не работают)....

    в итоге был найден и вставлен в htacces следующий костыль
    # If there are caps, set HASCAPS to true and skip next rule
    RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1]

    # Skip this entire section if no uppercase letters in requested URL
    RewriteRule ![A-Z] - [S=28]

    # Replace single occurance of CAP with cap, then process next Rule.
    RewriteRule ^([^A]*)A(.*)$ $1a$2
    RewriteRule ^([^B]*)B(.*)$ $1b$2
    RewriteRule ^([^C]*)C(.*)$ $1c$2
    RewriteRule ^([^D]*)D(.*)$ $1d$2
    RewriteRule ^([^E]*)E(.*)$ $1e$2
    RewriteRule ^([^F]*)F(.*)$ $1f$2
    RewriteRule ^([^G]*)G(.*)$ $1g$2
    RewriteRule ^([^H]*)H(.*)$ $1h$2
    RewriteRule ^([^I]*)I(.*)$ $1i$2
    RewriteRule ^([^J]*)J(.*)$ $1j$2
    RewriteRule ^([^K]*)K(.*)$ $1k$2
    RewriteRule ^([^L]*)L(.*)$ $1l$2
    RewriteRule ^([^M]*)M(.*)$ $1m$2
    RewriteRule ^([^N]*)N(.*)$ $1n$2
    RewriteRule ^([^O]*)O(.*)$ $1o$2
    RewriteRule ^([^P]*)P(.*)$ $1p$2
    RewriteRule ^([^Q]*)Q(.*)$ $1q$2
    RewriteRule ^([^R]*)R(.*)$ $1r$2
    RewriteRule ^([^S]*)S(.*)$ $1s$2
    RewriteRule ^([^T]*)T(.*)$ $1t$2
    RewriteRule ^([^U]*)U(.*)$ $1u$2
    RewriteRule ^([^V]*)V(.*)$ $1v$2
    RewriteRule ^([^W]*)W(.*)$ $1w$2
    RewriteRule ^([^X]*)X(.*)$ $1x$2
    RewriteRule ^([^Y]*)Y(.*)$ $1y$2
    RewriteRule ^([^Z]*)Z(.*)$ $1z$2

    # If there are any uppercase letters, restart at very first RewriteRule in file.
    RewriteRule [A-Z] - [N]

    RewriteCond %{ENV:HASCAPS} TRUE
    RewriteRule ^/?(.*) /$1 [R=301,L]

    который сначала перекидывал на http(покер по какому протоколу обратились) версию со строчными буквами... а с http шёл редирект на https...
    короче при одном обращении - два редиректа...

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

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


    если есть решение по строчным/заглавным - был бы рад.

    установка полноценных сеомодулей ещё немного за горами,а травить 404 болльшому количеству визитёров не охото.
     
  9. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    привести в нижнему регистру запросы, дело одной строки в контроллере сеопро.
     
    KirillKern нравится это.
  10. KirillKern

    KirillKern Активный пользователь

    Сообщения:
    102
    Симпатии:
    34
    можно носом ткнуть ? там по-моему есть перегон в строчные..но что-то у меня пошло не так...


    короче да, это был долбанный костыль. яган*он (


    Я сижу прям офуеваю от мастерства создавать себе проблемы)))10 часов к ряду я потратил на эту хрень)))
     
    Последнее редактирование: 21 мар 2017
  11. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    может и есть. Приложите файл, посмотрю..
     
  12. KirillKern

    KirillKern Активный пользователь

    Сообщения:
    102
    Симпатии:
    34
    Ближе к вечеру. Спасибо)
     
  13. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
  14. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    О!!! знакомая портянка :)

    Ну, в принципе после перехода на https - обе ПС посчитали его новым сайтом, и пошли крутить вертеть - чем и создали проблему нагрузки

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

    Как вариант сделать редирект силами php, не помню, почему тогда не сделали

    Коробочный сайтмап отключить и никогда не включать, или допилить до нормально работающего, или за малую сумму приобрести адекватный
     
  15. KirillKern

    KirillKern Активный пользователь

    Сообщения:
    102
    Симпатии:
    34
    используемый сеопро в сообщении, с такой строкой в коде, да.
    повторюсь, что ещё существует проблема с созданием редиректов(из модулей), которая ещё не решена.

    но тем не менее, если в юрл поменять любую букву на заглавную - отдаёт 404.


    простите за задержку. дни какие-то с ног на голову.
    то чувство, когда сам себе продел наделал и разрулил блин )))
    Снимок.PNG
     

    Вложения:

    • seo_pro.zip
      Размер файла:
      2,8 КБ
      Просмотров:
      7
    Последнее редактирование: 22 мар 2017