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 :P).

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 :P).
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ć :lol:

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 :P ) przydaje sie wtedy, kiedy mamy bardzo popularny serwis (cos na miare onet.pl :lol: )
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] :twisted: )

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.