Закрытие соединений к БД
Мне доказывают что закрывать нужно ВСЕ соединения в противном случае они остаються открытыми и тормозят сервак...
Так ли это? Может я не прав или мне вешают лапшу на уши?
Дело в том что мне с пеной у рта доказывают что обязательно закрывать соединения....
Хотя цитата из мана
Соединение с сервером будет закрыто при завершении исполнения скрипта, если до этого оно не будет закрыто с помощью функции mysql_close
но отноститься ли то же к функции pg_connect? по логике думаю что да
Хотя цитата из мана
Соединение с сервером будет закрыто при завершении исполнения скрипта, если до этого оно не будет закрыто с помощью функции mysql_close
но отноститься ли то же к функции pg_connect? по логике думаю что да
И да, и нет.
Однажды доверившись ману решил намеренно поскидывать все mysql_close() (и это при том что юзал mysql_pconnect(), который по идее и не надо было закрывать), и что же? Довольно часто стали появляться ошибки коннекта типа "достигнуто максимальное кол-во соединений"... Заменил pconnect на connect - не полегчало. Вернул всего одну строку, закрывающую соединение, и вот ОНО - СЧАСТЬЕ ;)
З.Ы. можно конечно катить бочку на криворукого хостера и.т.д. а можно, чтобы спокойней жилось, все таки не держать открытые коннекты в надежде их самостоятельной смерти.
Однажды доверившись ману решил намеренно поскидывать все mysql_close() (и это при том что юзал mysql_pconnect(), который по идее и не надо было закрывать), и что же? Довольно часто стали появляться ошибки коннекта типа "достигнуто максимальное кол-во соединений"... Заменил pconnect на connect - не полегчало. Вернул всего одну строку, закрывающую соединение, и вот ОНО - СЧАСТЬЕ ;)
З.Ы. можно конечно катить бочку на криворукого хостера и.т.д. а можно, чтобы спокойней жилось, все таки не держать открытые коннекты в надежде их самостоятельной смерти.
Из мана про mysql_pconnect
Вместо этого, оно останется рабочим для будущего использования (mysql_close также не закрывает постоянные соединения) :)
А вы после этой замены закрыли принудительно коннекты? Если нет - тогда и не удивительно что не полегчало... По таймауту они не так быстро сами отваливаются....
Нет разумеется, хотелось ведь поизвращаться, принудительное закрытие вернул позже, убедившись в ИМХО эквивалентности двух, как утверждалось разных ф-й коннекта (так кстати и остановился на использовании connect() :) )
Т.е постом выше ударение было именно на ф-ю pconnect(), соединения открытые которой также исчезают как в Бермудском треугольнике, никакого дальнейшего использования созданного коннекта я не заметил, лишь бесконечные "превышено кол-во....."
ВООБЩЕМ ЗАКРЫВАТЬ и ещё раз закрывать. Почувствуйте себя параноиком :D
"лучше держать открытым соединение КАК МОЖНО меньше, т.к сервер тратит свои ресурсы на поддержание сокета открытым"
Не знаю, насколько это критично, но я обычно открываю коннект в самом начале скрипта и закрываю перед началом обработки страницы шаблонизатором
p.s: mysql_pconnect(), говорят очень сильно экономит ресурсы. и закрывать его не нужно, ибо все полетит
p.s: mysql_pconnect(), говорят очень сильно экономит ресурсы. и закрывать его не нужно, ибо все полетит
его вообще в принципе не нужно закрывать?
если я правильно понял
тогда зачем такая функция для закрытия
Как понимаю подобные ошибки при использовании pconnect() возможно скачут из-за каких-то таймаутов, которые наложены на открытое соединение и обязаны быть выдержаны прежде чем его можно будет оставить в покое "для будущего использования".
Других обьяснений, ну разве что кроме тупости своего давнего хостера, найти не могу. Если кто знает, с радостью выслушаю :)
Ответ содержится в повышении эффективности. Постоянные соединения полезны в том случае, если при открытии большого количества SQL-соединений возникает ощутимая нагрузка на сервер. То, насколько велика эта нагрузка, зависит от многих факторов. <....> В случае, если затраты на установку соединения велики, постоянные соединения могут вам существенно помочь . Они позволяют дочернему процессу на протяжении всего жизненного цикла использовать одно и то же соединение вместо того, чтобы создавать его при обработке каждой страницы, которая взаимодействует с SQL-сервером. Это означает, что каждый дочерний процесс, открывший постоянное соединение, будет иметь свое собственное соединение с сервером. Например, если у вас запущено 20 дочерних процессов, которые выполнили скрипт, использовавший постоянное соединение с SQL-сервером, вы получите 20 различных соединений с SQL-сервером, по одному на каждый дочерний процесс
Как я понимаю,
это обозначает то, что если сервер БД находится вне сервера http, то затраты на установку соединения становятся выше затрат на собственно поддержание этого соединения. Но вряд ли это очень критично для общих нужд.
Соответственно, прочитав все нюансы, предостережения и ограничения pconnect, приходит в голову мысль не заморачиваться ими
Или вообще предоставить юзеру при установке системы выбрать тип используемого коннекта :D