Перейти к публикации

max_user_connections превысило


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

Хостинг 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. Дублирую тему из закрытого раздела, может простые пользователи, как и я, могут что-то посоветовать?

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

1. max_user_connections превышается из-за того-что много посетителей и надо менять хостинг (не думал, что 3000 - это много)?
Да

2. max_user_connections превышается из-за того-что хак работает не оптимально или такой запрос не может дать нагрузку?
Хостер бы сказал Вам, что это нагрузка :)

max_user_connections - это скорее всего ограничение на колличество одновременных запросов к сайту.

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

max_user_connections - это скорее всего ограничение на колличество одновременных запросов к сайту.

Количество одновременных запросов к MySQLу, а не к сайту.

B)

Изменено пользователем stud_muffler
Ссылка на сообщение
Поделиться на других сайтах

Аа точно, совсем забыл про MySQL :rolleyes:

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

В index.php в самом низу в строчке: GzipOut (); сделайте GzipOut (1);

потом откройте Ваш сайт, и в исходном коде в самом низу увидите примерно такое:

<!-- Время выполнения скрипта 0,06601 секунд -->

<!-- Время затраченное на компиляцию шаблонов 0,01053 секунд -->

<!-- Время затраченное на выполнение MySQL запросов: 0,01497 секунд -->

<!-- Общее количество MySQL запросов 1 -->

<!-- Для вывода использовалось сжатие x-gzip -->

<!-- Общий размер файла: 83948 байт После сжатия: 18945 байт -->

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

В index.php в самом низу в строчке: GzipOut (); сделайте GzipOut (1);

Я правильно понял, что это для отладки нужно, а потом опять заменить на GzipOut ();? Спасибо :)

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

Я правильно понял, что это для отладки нужно, а потом опять заменить на GzipOut ();? Спасибо

Да только для отладки, на работающем проекте это нужно отключать.

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

Количество одновременных запросов к 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 человек в сутки :)

Я бы для начала порекомендовал бы убрать это дело из скрипта и посмотреть за результатом. Точнее убрать бы (или оптимизировать) я бы рекомендовал в любом случае.

Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

Обновился до версии 8.2, это безобразие (большой "тяжелый" запрос) временно убрал. Пока думаю и пытаюсь разработать что-то взамен.

Может подскажете как в файле engine/modules/show.short.php с наименьшими системными затратмаи получить значение из Бд может через API?

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

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

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