Mysql_connect против mysql_pconnect

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

Заранее спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
26
0
37 544
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Очень маловероятно, что вы достигнете 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 очень помогает, равно как и их уникальное именование (например, включение в качестве идентификатора пользователя). Сделки немного сложнее; но ваш код всегда может сделать ОТКАТ вверху, на всякий случай.

В более поздних версиях PHP, чем когда я писал этот ответ, я обнаружил, что теперь есть настройки для регулировки размера пула. В частности, в 5.4.0 есть опция mysqli.max_persistent, которая является максимальным размером пула соединений в этом экземпляре PHP. В PHP все еще нет значения для тайм-аута соединений.

staticsan 03.06.2016 03:41

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

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

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

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

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

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

mysql_pconnect () это лучше использовать с mysqlnd? ", функция попытается найти (постоянное) соединение, которое уже открыто с тем же хостом, именем пользователя и паролем." - Я думаю, что с mysqlnd это лучше работает, или я ошибаюсь?

consigliere 16.02.2016 06:53

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/

Другие вопросы по теме