Улучшение сайта, показывающего max_user_connections

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

Я заметил, что первоначальные программисты реализовали класс «DB» для управления подключениями к базе данных, и кажется, что закрытие вызывается только в нижнем колонтитуле каждой страницы. Как я могу улучшить это? Должен ли я создавать объект db для каждого запроса, который я хочу сделать, а затем закрывать сразу после получения результатов?


person James P.    schedule 06.06.2011    source источник


Ответы (2)


Я не знаком с PHP, но как можно скорее закрыть DB-соединения всегда хорошо и независимо от используемого языка программирования. Также постарайтесь установить новое соединение с базой данных как можно позже.

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

Ваш «DB-класс» звучит как служебный класс для таких целей.

Взгляните и на этот вопрос.

person Fabian Barney    schedule 06.06.2011

Php уже закрывает соединение, когда скрипты заканчиваются.

Возможно, вы захотите увеличить максимальный лимит связи в конфигурационном файле mysql.

Кроме того, ваш скрипт занимает очень много времени, вы ничего не сделаете, закрыв соединение после запроса.

person dynamic    schedule 06.06.2011
comment
Это на взаимном хостинге, поэтому, к сожалению, увеличение лимита подключений невозможно. Скрипты не очень длинные, но запросов в них довольно много. - person James P.; 06.06.2011
comment
если у вас довольно много запросов, вы не можете закрыть соединение после первого запроса. - person dynamic; 06.06.2011
comment
Что вы думаете о следующем подходе (сверху страницы вниз)?: include header+initialization=›sql request=›save results=›close connection=›render html. - person James P.; 07.06.2011
comment
@james: это ничего не изменит. потому что рендеринг html не занимает много времени - person dynamic; 07.06.2011
comment
Я понимаю. Только что понял, что на одной странице отсутствует закрытие внизу. Это может быть источником проблемы. - person James P.; 07.06.2011