При запросе 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-запросов. Это не проблема.