ua1907 0 Опубликовано: 15 сентября 2009 Рассказать Опубликовано: 15 сентября 2009 Хостинг sweb, max_user_connections = 80 На сайте было 2300 посещений за 24 часа, но перед матчем лиги чемпионов количество посетителей еще увеличилось, и сайт вырубился из-за превышения max_user_connections. Движок DLE 7.5 На движке стоит хак с примерно таким кодом в файле show.short.php: $my_row = $db->super_query("SELECT reputation FROM ".PREFIX. "_post WHERE id=".$row['id']); $tpl->set('{reppost}', $my_row['reputation']); $monthRes = $db->super_query("SELECT sum(reputation) as result FROM " .PREFIX. "_reputation WHERE user_id=".$my_row['user_id']." AND date > ADDDATE(now(),INTERVAL -30 DAY)"); $tpl->set('{month_reputation}', $monthRes['result']); {reppost} и {month_reputation} стоит в шаблоне к краткой новости, которая показывается 12 раз в категории. PREFIX_reputation достаточно большая таблица. 1. max_user_connections превышается из-за того-что много посетителей и надо менять хостинг (не думал, что 3000 - это много)? 2. max_user_connections превышается из-за того-что хак работает не оптимально или такой запрос не может дать нагрузку? 3. И если это из-за хака, то можно ли создавать с помощью крон маленькую табличку и уже из нее брать репутацию, подсчитанную данным образом? Нагрузка при этом снизиться? сайт prognozist.ru. Дублирую тему из закрытого раздела, может простые пользователи, как и я, могут что-то посоветовать? Цитата Ссылка на сообщение Поделиться на других сайтах
WWW.ZEOS.IN 1 161 Опубликовано: 15 сентября 2009 Рассказать Опубликовано: 15 сентября 2009 1. max_user_connections превышается из-за того-что много посетителей и надо менять хостинг (не думал, что 3000 - это много)?Да 2. max_user_connections превышается из-за того-что хак работает не оптимально или такой запрос не может дать нагрузку?Хостер бы сказал Вам, что это нагрузка max_user_connections - это скорее всего ограничение на колличество одновременных запросов к сайту. Цитата Ссылка на сообщение Поделиться на других сайтах
stud_muffler 0 Опубликовано: 15 сентября 2009 Рассказать Опубликовано: 15 сентября 2009 (изменено) max_user_connections - это скорее всего ограничение на колличество одновременных запросов к сайту. Количество одновременных запросов к MySQLу, а не к сайту. Изменено 15 сентября 2009 пользователем stud_muffler Цитата Ссылка на сообщение Поделиться на других сайтах
WWW.ZEOS.IN 1 161 Опубликовано: 16 сентября 2009 Рассказать Опубликовано: 16 сентября 2009 Аа точно, совсем забыл про MySQL ua1907, тогда Вам надо уменьшать количество запросов к базе данных, чтобы, например, 1 запрос к сайту был равен ~1 запрос к базе данных.В index.php в самом низу в строчке: GzipOut (); сделайте GzipOut (1); потом откройте Ваш сайт, и в исходном коде в самом низу увидите примерно такое: <!-- Время выполнения скрипта 0,06601 секунд --> <!-- Время затраченное на компиляцию шаблонов 0,01053 секунд --> <!-- Время затраченное на выполнение MySQL запросов: 0,01497 секунд --> <!-- Общее количество MySQL запросов 1 --> <!-- Для вывода использовалось сжатие x-gzip --> <!-- Общий размер файла: 83948 байт После сжатия: 18945 байт --> Цитата Ссылка на сообщение Поделиться на других сайтах
ua1907 0 Опубликовано: 16 сентября 2009 Рассказать Опубликовано: 16 сентября 2009 Автор В index.php в самом низу в строчке: GzipOut (); сделайте GzipOut (1); Я правильно понял, что это для отладки нужно, а потом опять заменить на GzipOut ();? Спасибо Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 067 Опубликовано: 16 сентября 2009 Рассказать Опубликовано: 16 сентября 2009 Я правильно понял, что это для отладки нужно, а потом опять заменить на GzipOut ();? Спасибо Да только для отладки, на работающем проекте это нужно отключать. Цитата Ссылка на сообщение Поделиться на других сайтах
Al-x 7 Опубликовано: 16 сентября 2009 Рассказать Опубликовано: 16 сентября 2009 Количество одновременных запросов к MySQLу, а не к сайту. ua1907, тогда Вам надо уменьшать количество запросов к базе данных, чтобы, например, 1 запрос к сайту был равен ~1 запрос к базе данных. Не совсем. Имеется ввиду время соединения с базой данных. Т.е. вы делаете 1 или 10 запросов - это будет считаться как одно соединение с базой данных. Конечно, не спорю - если бы был 1 запрос или 100 - это бы отразилось на времени выполнения скрипта, одновременно открытых соединениях и т.п., но не при такой посещаемости. Скорее всего тут проблемы со стороны хостеров, или роботы какие навалились на сайт... $my_row = $db->super_query("SELECT reputation FROM ".PREFIX. "_post WHERE id=".$row['id']); $tpl->set('{reppost}', $my_row['reputation']);$monthRes = $db->super_query("SELECT sum(reputation) as result FROM " .PREFIX. "_reputation WHERE user_id=".$my_row['user_id']." AND date > ADDDATE(now(),INTERVAL -30 DAY)");$tpl->set('{month_reputation}', $monthRes['result']); Ну а за такие запросы человека к рабочим проектам подпускать крайне не рекомендуется, даже с посещаемостью 1 человек в сутки Я бы для начала порекомендовал бы убрать это дело из скрипта и посмотреть за результатом. Точнее убрать бы (или оптимизировать) я бы рекомендовал в любом случае. Цитата Ссылка на сообщение Поделиться на других сайтах
ua1907 0 Опубликовано: 30 сентября 2009 Рассказать Опубликовано: 30 сентября 2009 Автор Обновился до версии 8.2, это безобразие (большой "тяжелый" запрос) временно убрал. Пока думаю и пытаюсь разработать что-то взамен. Может подскажете как в файле engine/modules/show.short.php с наименьшими системными затратмаи получить значение из Бд может через API? Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.