Strona 1 z 2
Trwałe połączenie z bazą
: wt paź 05, 2004 9:33 am
autor: JaroW
Używając funkcji mysql_pconnect tworzymy tzw. trałe połączenie z bazą. W jaki sposób je zamknąć? Funkcja mysql_close tego nie robi. Serwer bazodanowy cały czas przechowuje otwarte połączenia i w końcu się zatyka.
Re: Trwałe połączenie z bazą
: wt paź 05, 2004 9:47 am
autor: iro
W manualu nie ma nic na temat zamykania połączenia nawiązywanego za pomocą tej funkcji (oprócz tego, że mysql_close() tego nie robi

). Proponuję zrezygnować ze stałego połączenia z bazą danych, gdyż możesz mieć ograniczenie w postaci maxymalnej liczby nawiązanych połączeń. Właśnie to jest powodem zatykania się serwera.
Re: Trwałe połączenie z bazą
: wt paź 05, 2004 10:15 am
autor: JaroW
Można by spytać po co w takim razie jest funkcja mysql_pconnect() i kiedy połączenie ustanowione za jej pomocą jest zamykane?
Re: Trwałe połączenie z bazą
: wt paź 05, 2004 11:04 am
autor: Stig
JaroW pisze:Można by spytać po co w takim razie jest funkcja mysql_pconnect() i kiedy połączenie ustanowione za jej pomocą jest zamykane?
Funkcja ta powstała po to, aby ograniczyć zaangażowanie części dostępnych zasobów i czasu, potrzebnych na połączenie za pomocą zwykłej funkcji mysql_connect(). I to właściwie jest jej jedyna zaleta. Jeśli chodzi o zamykanie tej funkcji to nic na ten temat nie wiem. Prawdobodonie połączenie nigdy nie zostanie zerwane, a przy ponownym wywołaniu tej funkcji, funkcja ta sprawdzi czy połączenie już istenieje i wykorzysta to istniejące połączenie.
W praktyce funkcja mysql_pconnect() jest nie najlepszym rozwiązaniem.
Re: Trwałe połączenie z bazą
: wt paź 05, 2004 2:13 pm
autor: Michał Fikus
Sam też dokładnie nie wiem - proponuję spytać na php.pl.
Mi się wydaje, że w ustawieniach serwera jest to definiowane.
Stig -> nie jest to najlepsze rozwiązanie... zależy od wykorzystania. To, że np. w Twoim serwisie nie potrzebujesz robić oszczędności użycia zasobów serwera, nie znaczy, że jest to mało przydatne (tzn. nie najlpesze rozwiązanie

).
Re: Trwałe połączenie z bazą
: wt paź 05, 2004 2:38 pm
autor: Stig
Michał Fikus pisze:Stig -> nie jest to najlepsze rozwiązanie... zależy od wykorzystania. To, że np. w Twoim serwisie nie potrzebujesz robić oszczędności użycia zasobów serwera, nie znaczy, że jest to mało przydatne (tzn. nie najlpesze rozwiązanie

).
Fakt, to zależy wszystko od wykorzystania, ale należy się zastanowić, czy jest sens oszczędzać użycie zasobów serwera kosztem tworzenia wielu połączeń i w efekcie jego zapchaniem. Oczywiście, w niektórych przypadkach funkcja mysql_pconnect() jest lepsza niż mysql_connect() (w końcu w jakimś celu została stworzona), ale tych przypadków jest (tak mi się wydaje) niewiele. Aby efektywnie używać funkcji mysql_pconnect() trzeba mieć dostęp do ustawień serwera (żeby móc je dostosować do własnych potrzeb). Poza tym znaczące różnice w wykorzystaniu obu funkcji widać, zapewne, dopiero przy bardzo zaawansowanych projektach. W takim wypadku lepiej chyba stosować funkcję mysql_connect(), która jest poprostu popularniejsza

Ja bynajmniej ją stosuję i nie mam zamiar się przesiadać

Re: Trwałe połączenie z bazą
: wt paź 05, 2004 5:25 pm
autor: Michał Fikus
Różnica jest odczuwalna nie tyle w zależności od zaawansowania projektu (mogą być duże operacje, ale to nie wpływa na ilość pobieranych danych w mySQL-u itp.) ale od częstotliwości nawiązywania połączenia - czyli częstotliwość wykonywania skryptów operujących na bazie danych. Dlatego jest tu oszczędność na nie otwieraniu po raz n-ty połączenia.
Re: Trwałe połączenie z bazą
: wt paź 05, 2004 7:26 pm
autor: wixor
coś tu si pomieszało - serwer się zapycha gdy używa się zwykłego connecta - podczas wykonywania wielu skryptów jednocześnie nawiązuje się wiele połączeń (wbrew pozorom, bardzo złożona operacja), a połączenia trwałe pozwalają na współużytkowanie jednego połączenie pezez wiele skryptów wykonujących się jednocześnie.
Re: Trwałe połączenie z bazą
: wt paź 05, 2004 10:09 pm
autor: Marim
Według mnie dla bardziej rozbudowanych serwisów w których są skrypty wykorzystujace duza ilosc polaczen do bazy, badz duza ilosc odwiedzajacych (przez caly czas z serwisu korzysta przynajmniej 1 osoba) o wiele bardziej oplaca sie uzywac funckji mysql_pconnect().
Przede wszystkim była mowa o zatykaniu serwera poprzez zbyt duza ilosc polaczen. Ale chyba tu jest jakas pomylka poniewaz jak sie uruchamia tzw. "stale polaczenie" to juz drugiego polaczenia sie nie uzywa. Tzn jest zawsze 1 i tylko 1 polaczenie do bazy. Serwer i baza na tym duzo zyskuja poniewaz to co naprawde obciaza bazy to sa wlasnie ciagle polaczenia do niej.
Re: Trwałe połączenie z bazą
: śr paź 06, 2004 9:15 am
autor: JaroW
... jak sie uruchamia tzw. "stale polaczenie" to juz drugiego polaczenia sie nie uzywa. Tzn jest zawsze 1 i tylko 1 polaczenie do bazy...
U mnie z trwałego połączenia korzysta tylko skrypt w którym zostało utworzone. Każdy następny skrypt otwiera kolejne połączenie.
Może w takim razie jest gdzieś błąd przy nawiązywaniu trwałego połączenia? Każdy skrypt na początku tworzy obiekt połączenia z bazą (wykorzystując mysql_pconnect()). Z tego obiektu korzystam przy wszystkich odwołaniach do bazy. Każdy następny sktypt tworzy następny obiekt itd. Może w tym rozwiązaniu tkwi problem?
Re: Trwałe połączenie z bazą
: śr paź 06, 2004 11:24 am
autor: Stig
Zgadza się, że za funkcja mysql_pconnect() tworzy tylko jedno połączenie. W przypadku jej ponownego wykorzystania sprawdza czy dane połączenie już istnieje. Jeżeli tak to korzysta z niego, jeżeli nie to je tworzy (może stworzyć je tylko raz). Problem z zapychaniem serwera przez trwałe połączenia może mieć takie podłoże: jeżeli używamy połączeń stałych, a niemal każdy skrypt wymaga dostępu do bazy, wskazane jest otwieranie stałego połączenia dla każdego procesu wykonywanego przez serwer. W tym wypadku należy odpowiednio dostosować ilość istniejących połączeń na jaką zezwala serwer (np. Apache standardowo 150) i baza MySQL (standardowo 100). Jeżeli zostaną one pozostawione na podstawowym poziomie, a nastąpi duże obciążenie systemu, mogą one nie wystarczyć do obsłużenia wszystkich żądań dostępu. Należy więc dopasować oba parametry tak, aby każdy proces serwera www miał możliwość otwarcia połączenia z bazą, a zasoby sprzętowe nie zostały przekoroczone.
Re: Trwałe połączenie z bazą
: śr paź 06, 2004 3:44 pm
autor: Michał Fikus
wixor -> nie pomieszało mi się, tylko źle mnie zrozumiałeś. Mówiłem o tym, że gdy używamy twardego połączenia z bazą, oszczędzamy na użyciu zasobów sprzętowych potrzebnych do wielokrotnego nawiązywanie połączeń miękkich.
serwer się zapycha gdy używa się zwykłego connecta - podczas wykonywania wielu skryptów jednocześnie nawiązuje się wiele połączeń
z tym całkowicie się zgadzam. Może jasno się nie wyraziłem, w takim razie przepraszam.
Re: Trwałe połączenie z bazą
: śr paź 06, 2004 4:13 pm
autor: wixor
ten post był odpowiedzią na post iro:
Proponuję zrezygnować ze stałego połączenia z bazą danych, gdyż możesz mieć ograniczenie w postaci maxymalnej liczby nawiązanych połączeń. Właśnie to jest powodem zatykania się serwera.
Re: Trwałe połączenie z bazą
: pt paź 08, 2004 1:05 am
autor: the_foe
generalnie, stale polaczenie z baza (al quaida

) przydaje sie wtedy, kiedy mamy bardzo popularny serwis (cos na miare onet.pl

)
Sprawa jest prosta: przy niewielu userach nie oplaca nam sie otwirac stalego polaczenia, bo sa duze "dziury" - czasy, kiedy serwer nie pracuje. W przypadku mocno odwiedzanych stron "koszt" polaczenia z baza jest wysoki, bo w tym samym czasie moze sie podlaczyc jeden user. Inaczej mowiac stoja w kolejce. Kiedy na raz chce otworzyc strone, wykorzystujaca niestale polaczenia z baza, 5-20 userow nie ma kloptu, ale jak to sa tysiace jak w przypadku onet.pl to zaczyna sie robic nieciekawie. stale polaczenia raz zalozone nie umieraja i kiedy przegladamy kolejne podstrony serwer wykorzystuje wczesniej zainicjowane polaczenie - nie jestemsy ciezarem dla serwera.
Jednak uwierzcie - nikomu tu nie jest to polaczenie potrzebne. W naszym przypadku zwykle polaczenie jest lepsze, tym bardziej ze nikt z nas nie posiada (chyba) serwera bez limitu, lub z wysokim, limitem jednoczesnych polaczen z baza.
Inna kwestia, ze wykorzystywanie stalego polaczenia, w polaczeniu z wadliwym skryptym moze doprowadzic do zawieszenia serwera! W przypadku zwyklego polaczenia nam to nie grozi, bo polaczenie jest automatycznie zrywane po zakonczeniu skryptu (zawsze mnie ciawilo po co wiec jest funkcja [manual]mysql_close[/manual]

)
Re: Trwałe połączenie z bazą
: pt paź 08, 2004 1:20 am
autor: the_foe
wixor pisze:coś tu si pomieszało - serwer się zapycha gdy używa się zwykłego connecta - podczas wykonywania wielu skryptów jednocześnie nawiązuje się wiele połączeń (wbrew pozorom, bardzo złożona operacja), a połączenia trwałe pozwalają na współużytkowanie jednego połączenie pezez wiele skryptów wykonujących się jednocześnie.
jedyna roznica miedzy zwyklym a stalym polaczeniem jest to, ze to drugie nei jest zrywane p ozakonczeniu skryptu. Widze ze podejrzewasz ze nasz Indianin to potrafi, niestety, aby miec wielowatkowy serwer trzeba by zainstalowac PHP pod IIS albo FastTrack.
Apache potrafi tylko obsluzyc wieloprocesorowo polaczenie host-klient, nei daje rady wykorzystac watkow ustanowionych z innym klientem, a ktore sa tozsame z requestem danego usera.