Подтвердить что ты не робот

Mysql_connect VS mysql_pconnect

У меня есть это сомнение, я искал в Интернете, и ответы кажутся разнообразными. Лучше ли использовать mysql_pconnect через mysql_connect при подключении к базе данных через PHP? Я читал, что pconnect масштабируется намного лучше, но, с другой стороны, постоянная связь... с 10 000 подключений одновременно, все настойчивые, не кажутся масштабируемыми для меня.

Спасибо заранее.

4b9b3361

Ответ 1

Персистентные подключения для MySQL должны быть ненужными. В других базах данных (например, Oracle) подключение к сети является дорогостоящим и трудоемким, поэтому, если вы можете повторно использовать соединение, это большая победа. Но эти бренды базы данных предлагают объединение пулов, что лучше решает проблему.

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

У стойких соединений тоже есть недостатки. Сервер базы данных выделяет ресурсы для каждого соединения, независимо от того, нужны ли соединения или нет. Таким образом, вы видите много потерянных ресурсов без цели, если соединения простаивают. Я не знаю, достигнете ли вы 10 000 простоя, но даже пара сотен стоит дорого.

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

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


Обновить март 2014:

Скорость соединения MySQL всегда была низкой по сравнению с другими брендами РСУБД, но она стала еще лучше.

См. http://mysqlserverteam.com/improving-connectdisconnect-performance/

В MySQL 5.6 мы приступили к работе над оптимизацией обработки кода подключений и разъединений. И эта работа ускорилась в MySQL 5.7. В этом сообщении в блоге я сначала покажу результаты, которые мы достигли, а затем опишем, что мы сделали для их получения.

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

Ответ 2

В основном вы должны балансировать затраты на создание соединений и поддержание соединений. Несмотря на то, что MySQL очень быстро настраивает новое соединение, он по-прежнему стоит - во время установки потока и в настройке TCP/IP с вашего веб-сервера. Это заметно на достаточно высоком участке трафика. К сожалению, у PHP нет никаких элементов управления постоянством соединений. Таким образом, ответ заключается в том, чтобы сократить длительность простоя в MySQL долгий путь (например, до 20 секунд) и увеличить размер кэша потоков. Вместе это обычно работает замечательно хорошо.

С обратной стороны приложение должно уважать состояние соединения. Лучше всего, если он не делает никаких предположений о том, в каком состоянии находится сеанс. Если вы используете временные таблицы, то использование CREATE IF NOT EXISTS и TRUNCATE TABLE помогает много, так же как именовать их однозначно (например, включать в качестве userid). Сделки более проблематичны; но ваш код всегда может делать ROLLBACK вверху, на всякий случай.

Ответ 3

Очень маловероятно, что вы достигнете 10000 соединений. В любом случае, перейдите в официальный источник . (Акцент мой).

Если постоянные соединения не имеют любые дополнительные функции, что они хороши для?

Ответ здесь предельно прост - эффективность. Постоянными соединениями являются хорошо, если накладные расходы для создания ссылки на ваш SQL-сервер высок. Будь или не слишком накладные расходы зависит от многих факторов. Как что вид базы данных, будь то или не он сидит на одном компьютере на который сидит ваш веб-сервер, как Загрузите машину, на которой сидит сервер SQL на есть и так далее. Нижняя строка заключается в том, что если накладные расходы на соединение Высокие, постоянные соединения помогают вам значительно. Они вызывают ребенка процесс просто подключиться только один раз на весь срок службы, а не на каждый раз, когда он обрабатывает страницу, которая требует подключения к SQL-серверу. Это означает, что для каждого ребенка, который открытое постоянное соединение будет имеют свои собственные постоянные подключение к серверу. Например, если у вас было 20 разных детей процессы, которые выполняли script, которые сделали постоянное соединение с вашим SQL сервера, у вас будет 20 разных подключения к серверу SQL, один от каждого ребенка.

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

Ответ 4

mysql_connect() и mysql_pconnect() оба работают для подключения к базе данных, но имеют небольшую разницу. В mysql_pconnect(), p означает соединение с сопротивлением.

Когда мы используем функцию mysql_connect(), каждый раз, когда она открывает и закрывает соединение с базой данных, в зависимости от запроса.

Но в случае функции mysql_pconnect():

  • Во-первых, при подключении функция попытается найти (постоянное) соединение, которое уже открыто с тем же хостом, именем пользователя и паролем. Если он найден, идентификатор для него будет возвращен вместо открытия нового соединения.

  • Во-вторых, соединение с SQL-сервером не будет закрыто при завершении выполнения script. Вместо этого соединение останется открытым для будущего использования (mysql_close() не будет закрывать соединение, установленное mysql_pconnect()).

mysql_pconncet() полезен, когда у вас много трафика на вашем сайте. В то время для каждого запроса он не будет открывать соединение, но будет принимать его из пула. Это повысит эффективность вашего сайта. Но для общего использования лучше всего использовать mysql_connect().

Ответ 5

mysql_connect()

1.mysql_connect может использоваться для закрытия соединения. Каждое время он открывает и закрывает соединение с базой данных в зависимости от запроса.

База данных 2.Here открывается каждый раз, когда страница загружается в MYSQL connect

3. Когда страница загружается, база данных загружается каждый раз

4. Он используется для закрытия соединения

Пример:

<?php $conn = mysql_connect(‘host’, ‘mysql_user’, ‘mysql_password’); if(!$conn){ die(‘Could not connect: ‘ . mysql_error()); } echo ‘Connected successfully’; mysql_close($conn); ?>

Описание:

host: указывает имя хоста или IP-адрес, например localhost.

mysql_user: Указывает имя пользователя MySQL

mysql_password: указывает пароль MySQL

mysql_pconnect()

1. Мы используем mysql_pconncet(), изначально пытаемся найти открытое постоянное соединение.

2. mysql_pconncet() открывает постоянное соединение

3.The mysql_pconnect() не поддерживает закрытое соединение

4.mysql_pconnect() не может закрыть соединение. Здесь откройте постоянное соединение с базой данных

База данных 5.Here не нужно подключать каждый раз.

6. База данных не должна подключаться каждый раз в mysql_pconncet().

подробнее: http://prittytimes.com/difference-between-mysql_connect-and-mysql_pconnect/