2010-04-02 7 views
2

Я поддерживаю унаследованный сайт, созданный на Drupal. В настоящее время мы испытываем «слишком много соединений» с базой данных.

В файле /includes/database.mysql.inc для подключения к базе данных используется @mysql_connect($url['host'], $url['user'], $url['pass'], TRUE, 2) (mysql_connect() documentation).

Следует использовать $new_link = TRUE? Я понимаю, что он «всегда откроет новую ссылку». Может ли это вызвать «слишком много соединений»?

+2

В конце концов, хостинговая компания уведомила меня, что у них возникли проблемы с сервером, который вызывал проблемы, которые я видел. – Eddie

ответ

1

Drupal запускает несколько высокопроизводительных сайтов без проблем. Например, сайт Grammy Awards перешел на Drupal в этом году, и в первый раз сайт не спустился во время церемонии! некоторые настройки требуют настройки на вашей настройке. Возможно, mysql.

Редактируйте my.cfg и перезагрузите сервер mysql (/ etc/my.CFG в фетровой шляпе, RH, CentOS и /etc/mysql/my.cfg на * buntu)

[туздО] max_connections = некоторый номер-вот

в качестве альтернативы, сначала попробовать изменения без перезагрузки сервера , войдите в MySQL и попробовать:

показать переменные, как # Этот «mAX_CONNECTIONS» сообщает вам номер текущего набор глобальных max_connections = некоторый-номер-вот

Ой, и как другой человек сказал: DO. НЕ. РЕДАКТИРОВАТЬ. Друпал. CORE. Это окупится, если вы хотите, чтобы ваш сайт обновлялся, может вызвать негибкую головную боль и принести вам мир боли.

+0

Очень тщательный ответ. Спасибо. – Eddie

0

Параметр new_link имеет силу только, если у вас есть несколько вызовов mysql_connect(), в течение 1 запроса, который, вероятно, не тот случай.

Я подозреваю, что это связано с тем, что слишком много пользователей посещают ваш сайт одновременно, потому что для каждого посетителя будет создано новое соединение с БД.

Если вы можете подтвердить, что это так, mysql_pconnect()мощи помощи, потому что ваша проблема не связанно с ударением на сервере базы данных, но количество соединений. Вы также должны прочитать Persistent database connections, чтобы узнать, применимо ли оно к настройке вашего веб-сервера, если вы решите пойти по этому маршруту.

1

MySQL, как и любые РСУБД, будет ограничено количество подключений, которое оно принимает в любое время. Файл конфигурации my.cnf указывает это значение для сервера в конфигурации max_connections. Вы можете изменить эту конфигурацию, но существуют реальные ограничения в зависимости от емкости вашего сервера.

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

Подключитесь к MySQL и используйте «SHOW PROCESSLIST». Он покажет вам открытые соединения и то, что они делают. У вас может быть несколько соединений, сидящих без дела или работающих запросов, которые слишком длинные. Для незанятых соединений может потребоваться просто убедиться, что ваш код не поддерживает открытые соединения, когда они им не нужны. Для второго они могут быть частью вашего кода, которые необходимо оптимизировать, чтобы запросы не занимали слишком много времени.

Если все соединения являются законными, у вас просто больше нагрузки, чем позволяет ваша текущая конфигурация. Если вы загружаете MySQL, даже при текущем соединении, вы можете немного увеличить его и посмотреть, как он развивается.

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

Иногда эти сбои являются лишь временными. Когда он терпит неудачу, вы можете просто повторить соединение через несколько миллисекунд позже. Если это все еще не удается, это может быть проблемой, и остановка скрипта - это правильная вещь. Не ставьте это в бесконечный цикл (видели это раньше, ужасная идея).

2

Редактирование ядра - нет. Вы забудете, что сделали, обновили версию, и bam, изменения ушли.

+0

Очень верно. Я не думал об этом. Спасибо за пробуждение. – Eddie

1

FYI: использование постоянных соединений с Drupal требует проблем. Насколько я знаю, никто не использует это.

Смежные вопросы