max_user_connections превышается

Q
На сайте с 01.04.2006
Offline
143
962

Хостинг sweb, max_user_connections = 80

На сайте было 2300 посещений за 24 часа, но перед матчем лиги чемпионов количество посетителей еще увеличилось, и сайт вырубился из-за превышения max_user_connections.

Движок DLE 7.5

На движке стоит хак с примерно таким кодом:


$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. И если это из-за хака, то можно ли создавать с помощью крон маленькую табличку и уже из нее брать репутацию, подсчитанную данным образом? Нагрузка при этом снизиться?

querty добавил 15.09.2009 в 23:42

Сайт о котором здесь написал в подписи. Думал будет рекорд посещаемости, а оно вон как вышло :(

wdsg
На сайте с 09.02.2009
Offline
31
#1

Параметр max_user_connections ограничивает число одновременных подключений к базе. Т.е. в некоторый период времени возникла ситуация, когда DLE одновременно обрабатывал более 80 HTTP-запросов и, соответственно, поднял более 80 соединений с базой. Я это к тому, что ограничение не количественное, а пиковое. Образно, не ресурсе может вообще не быть посещаемости, но совершив одновременно 81 запрос, мы всё равно упрёмся в max_user_connections=80. Решений данной проблемы может быть несколько, но все они должны быть приняты только на основе данных профилирования системы.

querty:
max_user_connections превышается из-за того-что хак работает не оптимально или такой запрос не может дать нагрузку?

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

Проектирование и разработка сложных IT-систем. Вожусь с проблемными задачами.
[Удален]
#2

LIMIT n используй, скорее в этом причина

dkameleon
На сайте с 09.12.2005
Offline
386
#3

лучше кешировать.

Дизайн интерьера (http://balabukha.com/)
Q
На сайте с 01.04.2006
Offline
143
#4

А как кешиовать, создать вспомогательную таблицу и из нее простым запросом брать данные, а раз в день обновлять вспомогательную таблицу с помощью крон. так?

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

edogs software
На сайте с 15.12.2005
Offline
775
#5
querty:

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

Именно так. Точнее, превышается максимальное кол-во коннектов одновременных.

limit n не при чем абсолютно (судя по запросам и так 1 запись выбирается), кэширование если оно не будет исключать коннекта к БД - особо не поможет (т.к. проблема в кол-ве одновременных коннектов), удаление хака или его кэширование особо не спасет (несколько поможет, т.к. меньше времени будет выполнятся весь скрипт - скорее освободятся новые коннекты).

Есть обходной маневр (завести еще 1 юзера) и может помочь попытка отключить pconnect (если он включен), посмотрите здесь

/ru/forum/comment/4214576 - уже отвечали на аналогичный вопрос. Там же гляньте и на пункт 3.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий