Неужели безрассудно покинуть соединение mysql через страницу?

При запросе db правдоподобно чувствовать себя крайне параноидальным? Я дошел до открытия и закрытия соединения mysql каждый раз, когда нужно выполнить новый запрос. Я боюсь, что (особенно с включенными страницами ajax) это приведет к значительному снижению производительности.

Должен ли я продолжать этот метод или хотя бы открывать и закрывать соединения один раз на каждой странице (вместо запроса)? (я пишу в php btw)

Спасибо.

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

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

Вы не должны закрыть соединения MySQL немедленно. Лучше использовать одно соединение для всего PHP-скрипта. PHP будет автоматически закрывать соединение, если вы явно не используете его.

Открытие нового соединения требует небольшого штрафного времени, особенно если MySQL живет на другом сервере в сети. Для новых TCP-соединений требуется трехстороннее квитирование , и каждое TCP-соединение потребляет ресурсы ядра не менее двух минут .

Хотя PHP не поддерживает полноценный пул соединений, процедурный MySQL API поддерживает постоянные соединения. Дополнительную mysql_pconnect() см. В разделе mysql_pconnect() . В моем офисе мы используем pconnect чтобы избежать сбоя стеков TCP на нашем высокоскоростном PHP-сайте.

Рассмотрим объекты данных PHP, которые могут поддерживать постоянное соединение для вас. Вы действительно только подключаетесь к учетным данным один раз, а затем кешируете соединение. Создайте соединение с чем-то следующим образом:

$dbh = new PDO('mysql:host=HOSTNAME;dbname=DBNAME', 'USER', 'PASSWORD', array(PDO::ATTR_PERSISTENT => true));

Для получения дополнительной информации см. Эту страницу в руководстве по php.

Не могу говорить за PHP, но когда я пишу такие вещи в Apache / Perl, я обычно делаю две вещи для повышения производительности:

a) позволить MySQL обрабатывать, чтобы оставаться открытым, пока работает демон Apache. б) хранить кешированный оператор обрабатывает (используя кеш LRU).

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