Важно ли закрывать эффективность соединений mysql, или она автоматически закрывается после запуска файла php?
Важно ли закрывать эффективность соединений mysql, или она автоматически закрывается после запуска файла php?
Ответы:
Из документации :
Примечание. Ссылка на сервер будет закрыта, как только закончится выполнение скрипта, если только она не была закрыта ранее явным вызовом mysql_close ().
Если ваш скрипт должен выполнить достаточный объем обработки после получения результата и получил полный набор результатов, вам определенно следует закрыть соединение. Если вы этого не сделаете, есть вероятность, что сервер MySQL достигнет своего лимита подключения, когда веб-сервер сильно загружен. Если вы не можете закрыть соединение MySQL почти до конца скрипта, это будет чище, хотя делать это явно не нужно.
Я не уверен, как fastcgi влияет на вещи. На одной странице утверждается, что сборка PHP, поддерживающая fastcgi, будет создавать постоянные соединения даже для mysql_connect. Это противоречит документации в том смысле, что соединение закрывается при завершении процесса, а не сценария. Вместо тестирования я рекомендую использовать mysql_close (). Собственно, я рекомендую использовать PDO , если он доступен.
"The link to the server will be closed as soon as the execution of the script ends."
Когда пользователь закрывает страницу раньше, это не имеет значения для сервера PHP. Он запускает сценарий как всегда и завершает сценарий как всегда. Только пользователь не увидит результата.
Это важно? Не так много
Считается ли это хорошей практикой? Да.
Я не понимаю, почему вы не хотите его закрыть.
mysql_close
написано: «Использование mysql_close () обычно не требуется, поскольку непостоянные открытые ссылки автоматически закрываются в конце выполнения скрипта». Я бы не стал считать плохой практикой не закрывать соединение.
При использовании чего-то вроде cgi совершенно необязательно закрывать соединения mysql, поскольку они закрываются автоматически в конце выполнения скрипта. При использовании постоянных технологий, таких как mod_perl и других, которые поддерживают ваши соединения между запросами, важно отслеживать соединения, глобальные переменные и т. Д.
В основном, для постоянных данных убирайте за собой. Для тривиальных, непостоянных данных все это исчезнет, когда запрос все равно завершится. В любом случае, лучше всего всегда закрывать свои связи.
Закрывается, как только сценарий завершает выполнение. Если вы не открыли постоянное соединение. В идеале вы должны освободить ресурс (здесь соединение), как только вы закончите с ним. Если нет большой вероятности, что он вам снова понадобится очень скоро при исполнении.
Пул соединений или использование постоянных соединений (если это то, что вы имели в виду) - хорошая идея, если вы находитесь за одним сервером базы данных. Однако, если серверов больше и вы выполняете балансировку нагрузки, это может повредить распределению работы. Обычно одни клиенты выполняют тяжелые запросы, а другие - более легкие. Таким образом, если одно и то же соединение используется через n, некоторые серверы будут сильно загружены, а другие будут использоваться недостаточно. Рассмотрите возможность использования меньших ttls и переменного размера пула соединений.
Большинство CMS закрывают соединение MySQL в конце запроса, что на самом деле бессмысленно, потому что PHP все равно сделает это.
Однако, если у вас есть сценарий, в котором соединение больше не требуется, скажем, ближе к середине сценария, а затем происходят другие тяжелые действия, тогда рекомендуется явно закрыть соединение. Это освободит некоторые ресурсы.
Сейчас много говорится о преимуществах закрытия соединения, но почти ничего не сказано о преимуществах его неиспользования. По сути, если вы не закрываете соединение в конце скрипта, вы действительно экономите некоторые ресурсы. Представьте себе веб-приложение (или любое приложение), получающее 100 просмотров страниц в секунду. Таким образом, каждую секунду вам нужно будет вызывать mysqli_close
100 раз - это означает, что каждую секунду у вас будет 100 ненужных обратных обращений к серверу базы данных для закрытия открытых соединений. С точки зрения производительности это чистые накладные расходы, так как PHP все равно будет проверять наличие открытых соединений, когда сценарий завершится, и закроет эти соединения, и может быть так, потому что все происходит так быстро, что PHP не видит, что у вас есть закрыл эти соединения и попытается закрыть их снова.
Примечание: ответ выше предполагает, что вы не используете постоянные соединения (постоянные соединения не используются ни в одной из основных CMS).