Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Закрытие соединений к БД

304
11 января 2007 года
Fenyx
707 / / 26.01.2005
Обязательно ли закрывать соединения к БД открытые непостоянно? то есть функциями pg_connect, mysql_connect. На сколько я знаю после выполнения скрипта ВСЕ ресурсы освобождаються, так же как и все непостоянные соединения закрываються....
Мне доказывают что закрывать нужно ВСЕ соединения в противном случае они остаються открытыми и тормозят сервак...
Так ли это? Может я не прав или мне вешают лапшу на уши?
13
11 января 2007 года
RussianSpy
3.0K / / 04.07.2006
Лучше закрывать. От одной маленькой строчки скрипт не станет работать медленнее...
304
11 января 2007 года
Fenyx
707 / / 26.01.2005
Цитата: RussianSpy
Лучше закрывать. От одной маленькой строчки скрипт не станет работать медленнее...


Дело в том что мне с пеной у рта доказывают что обязательно закрывать соединения....
Хотя цитата из мана
Соединение с сервером будет закрыто при завершении исполнения скрипта, если до этого оно не будет закрыто с помощью функции mysql_close
но отноститься ли то же к функции pg_connect? по логике думаю что да

1.9K
11 января 2007 года
InterWen
331 / / 16.09.2006
Цитата: Fenyx
Дело в том что мне с пеной у рта доказывают что обязательно закрывать соединения....
Хотя цитата из мана
Соединение с сервером будет закрыто при завершении исполнения скрипта, если до этого оно не будет закрыто с помощью функции mysql_close
но отноститься ли то же к функции pg_connect? по логике думаю что да




И да, и нет.

Однажды доверившись ману решил намеренно поскидывать все mysql_close() (и это при том что юзал mysql_pconnect(), который по идее и не надо было закрывать), и что же? Довольно часто стали появляться ошибки коннекта типа "достигнуто максимальное кол-во соединений"... Заменил pconnect на connect - не полегчало. Вернул всего одну строку, закрывающую соединение, и вот ОНО - СЧАСТЬЕ ;)


З.Ы. можно конечно катить бочку на криворукого хостера и.т.д. а можно, чтобы спокойней жилось, все таки не держать открытые коннекты в надежде их самостоятельной смерти.

304
11 января 2007 года
Fenyx
707 / / 26.01.2005
Цитата: InterWen
И да, и нет.

Однажды доверившись ману решил намеренно поскидывать все mysql_close() (и это при том что юзал mysql_pconnect(), который по идее и не надо было закрывать), и что же? Довольно часто стали появляться ошибки коннекта типа "достигнуто максимальное кол-во соединений"... Заменил pconnect на connect - не полегчало. Вернул всего одну строку, закрывающую соединение, и вот ОНО - СЧАСТЬЕ ;)


З.Ы. можно конечно катить бочку на криворукого хостера и.т.д. а можно, чтобы спокойней жилось, все таки не держать открытые коннекты в надежде их самостоятельной смерти.


Из мана про mysql_pconnect
Вместо этого, оно останется рабочим для будущего использования (mysql_close также не закрывает постоянные соединения) :)

13
11 января 2007 года
RussianSpy
3.0K / / 04.07.2006
Цитата: InterWen
Заменил pconnect на connect - не полегчало.


А вы после этой замены закрыли принудительно коннекты? Если нет - тогда и не удивительно что не полегчало... По таймауту они не так быстро сами отваливаются....

1.9K
11 января 2007 года
InterWen
331 / / 16.09.2006
Цитата: RussianSpy
А вы после этой замены закрыли принудительно коннекты? Если нет - тогда и не удивительно что не полегчало... По таймауту они не так быстро сами отваливаются....




Нет разумеется, хотелось ведь поизвращаться, принудительное закрытие вернул позже, убедившись в ИМХО эквивалентности двух, как утверждалось разных ф-й коннекта (так кстати и остановился на использовании connect() :) )
Т.е постом выше ударение было именно на ф-ю pconnect(), соединения открытые которой также исчезают как в Бермудском треугольнике, никакого дальнейшего использования созданного коннекта я не заметил, лишь бесконечные "превышено кол-во....."

ВООБЩЕМ ЗАКРЫВАТЬ и ещё раз закрывать. Почувствуйте себя параноиком :D

253
11 января 2007 года
Proger_XP
1.5K / / 07.08.2004
Вообще, как говорят гуру:
"лучше держать открытым соединение КАК МОЖНО меньше, т.к сервер тратит свои ресурсы на поддержание сокета открытым"
Не знаю, насколько это критично, но я обычно открываю коннект в самом начале скрипта и закрываю перед началом обработки страницы шаблонизатором
p.s: mysql_pconnect(), говорят очень сильно экономит ресурсы. и закрывать его не нужно, ибо все полетит
622
11 января 2007 года
nilbog
507 / / 19.12.2006
Цитата: Proger_XP

p.s: mysql_pconnect(), говорят очень сильно экономит ресурсы. и закрывать его не нужно, ибо все полетит


его вообще в принципе не нужно закрывать?
если я правильно понял
тогда зачем такая функция для закрытия

1.9K
11 января 2007 года
InterWen
331 / / 16.09.2006
Ну предположим не нужно (хотя все же возможно, ни пользы, ни вреда как грят), но а как преодолевать лимиты на максимальное кол-во соединений?
Как понимаю подобные ошибки при использовании pconnect() возможно скачут из-за каких-то таймаутов, которые наложены на открытое соединение и обязаны быть выдержаны прежде чем его можно будет оставить в покое "для будущего использования".

Других обьяснений, ну разве что кроме тупости своего давнего хостера, найти не могу. Если кто знает, с радостью выслушаю :)
16K
12 января 2007 года
_MIB_
30 / / 12.01.2007
Лучше использовать mysql_connect. Его соединение закрывается автоматически. Еще не сталкивался с проблемой открытых соед. mysql_pconnect даже Зеев Сураски не советует использовать. Действительно возникает проблема при большом кол-ве посетителей. Соединение закрывается только по таймауту, который является довольно продолжительным.
253
12 января 2007 года
Proger_XP
1.5K / / 07.08.2004
Хм.... Обратимся к докам:
Цитата:
Если постоянные соединения не предоставляют никакой дополнительной функциональности, чем же они тогда так хороши?
Ответ содержится в повышении эффективности. Постоянные соединения полезны в том случае, если при открытии большого количества SQL-соединений возникает ощутимая нагрузка на сервер. То, насколько велика эта нагрузка, зависит от многих факторов. <....> В случае, если затраты на установку соединения велики, постоянные соединения могут вам существенно помочь . Они позволяют дочернему процессу на протяжении всего жизненного цикла использовать одно и то же соединение вместо того, чтобы создавать его при обработке каждой страницы, которая взаимодействует с SQL-сервером. Это означает, что каждый дочерний процесс, открывший постоянное соединение, будет иметь свое собственное соединение с сервером. Например, если у вас запущено 20 дочерних процессов, которые выполнили скрипт, использовавший постоянное соединение с SQL-сервером, вы получите 20 различных соединений с SQL-сервером, по одному на каждый дочерний процесс


Как я понимаю,

Цитата:
В случае, если затраты на установку соединения велики, постоянные соединения могут вам существенно помочь


это обозначает то, что если сервер БД находится вне сервера http, то затраты на установку соединения становятся выше затрат на собственно поддержание этого соединения. Но вряд ли это очень критично для общих нужд.
Соответственно, прочитав все нюансы, предостережения и ограничения pconnect, приходит в голову мысль не заморачиваться ими
Или вообще предоставить юзеру при установке системы выбрать тип используемого коннекта :D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог