Друзья, выручайте ) Нежданно негаданно словил такую приколюху... В силу молчаливости хостаря заметил только когда из бэкапов уже не развернуться... Вспомнить что делал не представляется возможным (ставил модули по rss потокам, но их уже выпиливал - бестолку) Сайт давно уже перехал с 1,5 на 2102 местную. И относительно недавно стал переeзжать на https. В общем и целом на этом тарифе я давно, на этом домене тоже(по сути он сменился на https, но всё же). Боты запрашивают не миллионы и даже не тысячи страниц в час. Мой товарищ настаивает на том, что вина в ботах(бинк, майл, яша, гугл подрубаются, действительно чаще посетителей, коих в день 700-800). Нагрузка по базе относительно не изменилась Но у меня разгорается от такового вот лога долгих запросов в MySQL >>>> вырезано, перенесено в следующее сообщение В силу того, что от ботов, по понятным причинам, зашториваться не охотj. А знания мои в MySQL ограничиваются однострочными запросами(как правило, в гугл), прошу хелпа в вопросе оптимизации оных. Я так и не понял с чем именно проблема, с тем что сайтмап генерируется на лету (на лету? коробочный гугл сайтмап),или с тупизмом в самих запросах. Страница продукта как таковая и вне каких-то шоковых ситуаций генерируется и загружается практически моментально (1-2 сек, по gtmetrix), но когда ловит эти 1000 ms - посетитель натыкается на >110секунд ожидания Заранее благодарен.
Спойлер: 1000 ms Страница:/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
Google Sitemap если штатный, то может и создавать нагрузку. Все же лучше не генерировать каждый раз, а кешировать итд. Всяческих генераторов сайтмап которые не создают нагрузку хватает. Далее. Бытует мнение (не силен в теории этого вопроса), что шифрование трафика создает дополнительную нагрузку на процессор, что и влияет на тариф. Когда поднялась шумиха вокруг https везде писали, что возрастут затраты из за покупки сертификата и смены тарифа из за возросшей нагрузки.
вырубил стоковый сайтмапгенератор под гугла... пока рано, говорить, но нагрузка вроде как снизилась... upd: ничерта не снизилась не посоветуете фришного сайтмапгенератора с кэшем ? понятно что гугл в помощь, но уже столько говна всякого перелопатил, что щас ещё глубже закопаюсь, по-моему ( очень мало инфы по оптимизации запросов в двойке, такой проблемы нет ? не стоит её рассматривать ? если под полуторку это пологовно едва ли не решение всех проблем... то с двойкой такого объёма инфы нет (индексы добавлены уже все какие только можно)
блин... кэшеры это ничерта не выход по-моему... понятно, что когда плавно всё это дело растёт - мошт и вариант... но когда у тебя резко забомбило, на сайте, которому не первый год... ну блин... это косяк разраба, того мудака, который чо-то накосячил с кодом (все обернулись на меня?)... где то я находил этот модуль уже... ща два скрина скину, посмеётесь а... щас уже не так смешно..но ночью у них за4е секунды было... понятно что у меня уже чо-то там где-то подпилено, да выпелено.. но у меня на лету всё
Кешер как минимум должен снизить нагрузку. Вы вот в спойлере статистику давали. Но вот там не хватает данных по кол-ву запросов. Может один нагруженный процесс долбится 1000 в час.. вот и нагрузка. Тем более показали вы время, но информации по нагрузки на cpu нету. В любом случаи, мне кажется https дал свои результаты по нагрузки. Не зря же пишут об этом?
да. отсутствие временной метки косяк мода логирования, не до допилов сейчас. хостарь божитсться, что https не при делах.. кэшер, да. понятно, нагрузку снизит, но сколько я с мультиязычником/мультивалютником с ними нае6*ался... что ставить кэшеры желание отбило... на данный момент проблема как бы решена следующим макаром, буду выяснять кто именно виноват чуть позже. ибо нет времени сейчас вникать, адовый денёк. вот стата с отрубленной гуглсайтмапой и с костылём, о котором напишу под скрином короче были у меня в своё время 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 болльшому количеству визитёров не охото.
можно носом ткнуть ? там по-моему есть перегон в строчные..но что-то у меня пошло не так... короче да, это был долбанный костыль. яган*он ( Я сижу прям офуеваю от мастерства создавать себе проблемы)))10 часов к ряду я потратил на эту хрень)))
О!!! знакомая портянка Ну, в принципе после перехода на https - обе ПС посчитали его новым сайтом, и пошли крутить вертеть - чем и создали проблему нагрузки В таком случае надо было, уже поздно, наверное, установить частоту посещения роботом в роботс Как вариант сделать редирект силами php, не помню, почему тогда не сделали Коробочный сайтмап отключить и никогда не включать, или допилить до нормально работающего, или за малую сумму приобрести адекватный
используемый сеопро в сообщении, с такой строкой в коде, да. повторюсь, что ещё существует проблема с созданием редиректов(из модулей), которая ещё не решена. но тем не менее, если в юрл поменять любую букву на заглавную - отдаёт 404. простите за задержку. дни какие-то с ног на голову. то чувство, когда сам себе продел наделал и разрулил блин )))