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






Очень маловероятно, что вы достигнете 10000 подключений. В любом случае, перейдите к официальный источник. (Акцент мой).
If persistent connections don't have any added functionality, what are they good for?
The answer here is extremely simple -- efficiency. Persistent connections are good if the overhead to create a link to your SQL server is high. Whether or not this overhead is really high depends on many factors. Like, what kind of database it is, whether or not it sits on the same computer on which your web server sits, how loaded the machine the SQL server sits on is and so forth. The bottom line is that if that connection overhead is high, persistent connections help you considerably. They cause the child process to simply connect only once for its entire lifespan, instead of every time it processes a page that requires connecting to the SQL server. This means that for every child that opened a persistent connection will have its own open persistent connection to the server. For example, if you had 20 different child processes that ran a script that made a persistent connection to your SQL server, you'd have 20 different connections to the SQL server, one from each child.
Note, however, that this can have some drawbacks if you are using a database with connection limits that are exceeded by persistent child connections. If your database has a limit of 16 simultaneous connections, and in the course of a busy server session, 17 child threads attempt to connect, one will not be able to. If there are bugs in your scripts which do not allow the connections to shut down (such as infinite loops), the database with only 16 connections may be rapidly swamped. Check your database documentation for information on handling abandoned or idle connections.
Для MySQL постоянные соединения не нужны. В других базах данных (например, Oracle) создание соединения является дорогостоящим и трудоемким, поэтому, если вы можете повторно использовать соединение, это большая победа. Но эти бренды баз данных предлагают пул соединений, который лучше решает проблему.
Подключение к базе данных MySQL выполняется быстрее по сравнению с другими брендами, поэтому использование постоянных подключений дает пропорционально меньшую выгоду для MySQL, чем для другой марки базы данных.
У постоянных соединений есть и обратная сторона. Сервер базы данных выделяет ресурсы каждому соединению независимо от того, нужны соединения или нет. Таким образом, вы видите много потраченных впустую ресурсов, если соединения простаивают. Не знаю, достигнете ли вы 10 000 незанятых соединений, но даже пара сотен обходится дорого.
Соединения имеют состояние, и для PHP-запроса было бы неприемлемо «наследовать» информацию из сеанса, который ранее использовался другим PHP-запросом. Например, временные таблицы и пользовательские переменные обычно очищаются при закрытии соединения, но не при использовании постоянных соединений. Точно так же настройки на основе сеанса, такие как набор символов и сопоставление. Кроме того, LAST_INSERT_ID() сообщит об идентификаторе, сгенерированном в последний раз во время сеанса, даже если это было во время предыдущего запроса PHP.
По крайней мере, для MySQL обратная сторона постоянных соединений, вероятно, перевешивает их преимущества. Есть и другие, более эффективные методы достижения высокой масштабируемости.
Обновление март 2014 г .:
Скорость соединения MySQL всегда была низкой по сравнению с другими брендами СУБД, но она становится еще лучше.
См. http://mysqlserverteam.com/improving-connectdisconnect-performance/
In MySQL 5.6 we started working on optimizing the code handling connects and disconnects. And this work has accelerated in MySQL 5.7. In this blog post I will first show the results we have achieved and then describe what we have done to get them.
Прочтите блог для получения более подробной информации и сравнений скорости.
По сути, вам нужно сбалансировать затраты на создание подключений и на поддержание подключений. Несмотря на то, что MySQL очень быстро устанавливает новое соединение, это все равно стоит денег - во время настройки потока и во время настройки TCP / IP с вашего веб-сервера. Это заметно на сайте с достаточно высокой посещаемостью. К сожалению, в PHP нет элементов управления постоянством соединений. Таким образом, ответ состоит в том, чтобы значительно снизить тайм-аут простоя в MySQL (например, до 20 секунд) и увеличить размер кэша потока. В совокупности это обычно работает замечательно.
С другой стороны, ваше приложение должно учитывать состояние соединения. Лучше всего, если он не делает никаких предположений о том, в каком состоянии находится сеанс. Если вы используете временные таблицы, то использование CREATE IF NOT EXISTS и TRUNCATE TABLE очень помогает, равно как и их уникальное именование (например, включение в качестве идентификатора пользователя). Сделки немного сложнее; но ваш код всегда может сделать ОТКАТ вверху, на всякий случай.
mysql_connect() и mysql_pconnect() оба работают для подключения к базе данных, но с небольшой разницей. В mysql_pconnect()p означает постоянное соединение.
Когда мы используем функцию mysql_connect(), она каждый раз открывает и закрывает соединение с базой данных, в зависимости от запроса.
Но в случае функции mysql_pconnect():
Во-первых, при подключении функция попытается найти (постоянное) соединение, которое уже открыто с тем же хостом, именем пользователя и паролем. Если он будет найден, вместо открытия нового соединения будет возвращен его идентификатор.
Во-вторых, соединение с SQL-сервером не будет закрыто по окончании выполнения скрипта. Вместо этого соединение останется открытым для использования в будущем (mysql_close() не закроет соединение, установленное mysql_pconnect()).
mysql_pconncet() полезен, когда на вашем сайте много трафика. В то время для каждого запроса он не будет открывать соединение, а будет брать его из пула. Это повысит эффективность вашего сайта. Но для общего использования лучше всего подходит mysql_connect ().
mysql_pconnect () это лучше использовать с mysqlnd? ", функция попытается найти (постоянное) соединение, которое уже открыто с тем же хостом, именем пользователя и паролем." - Я думаю, что с mysqlnd это лучше работает, или я ошибаюсь?
MYSQL_CONNECT ()
1. mysql_connect может использоваться для закрытия соединения. Каждый раз, когда он открывает и закрывает соединение с базой данных, в зависимости от запроса.
2.Здесь база данных открывается каждый раз, когда страница загружается в 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. mysql_pconnect () не поддерживает закрытое соединение
4. mysql_pconnect () не может закрыть соединение. Здесь откройте постоянное соединение с базой данных
5.Здесь нет необходимости подключать базу данных каждый раз.
6. БД не нужно каждый раз подключать в mysql_pconncet ().
подробнее: http://prittytimes.com/difference-between-mysql_connect-and-mysql_pconnect/
В более поздних версиях PHP, чем когда я писал этот ответ, я обнаружил, что теперь есть настройки для регулировки размера пула. В частности, в 5.4.0 есть опция
mysqli.max_persistent, которая является максимальным размером пула соединений в этом экземпляре PHP. В PHP все еще нет значения для тайм-аута соединений.