Trwałe połączenie z bazą
Trwałe połączenie z bazą
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ą
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ą
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ą
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.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?
W praktyce funkcja mysql_pconnect() jest nie najlepszym rozwiązaniem.
-
Michał Fikus
- Przelotem

- Posty: 242
- Rejestracja: sob cze 08, 2002 6:39 pm
- Lokalizacja: Wejherowo
Re: Trwałe połączenie z bazą
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
).
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ą
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 popularniejszaMichał 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).
-
Michał Fikus
- Przelotem

- Posty: 242
- Rejestracja: sob cze 08, 2002 6:39 pm
- Lokalizacja: Wejherowo
Re: Trwałe połączenie z bazą
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ą
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ą
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.
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ą
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.... jak sie uruchamia tzw. "stale polaczenie" to juz drugiego polaczenia sie nie uzywa. Tzn jest zawsze 1 i tylko 1 polaczenie do bazy...
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ą
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.
-
Michał Fikus
- Przelotem

- Posty: 242
- Rejestracja: sob cze 08, 2002 6:39 pm
- Lokalizacja: Wejherowo
Re: Trwałe połączenie z bazą
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.
z tym całkowicie się zgadzam. Może jasno się nie wyraziłem, w takim razie przepraszam.serwer się zapycha gdy używa się zwykłego connecta - podczas wykonywania wielu skryptów jednocześnie nawiązuje się wiele połączeń
Re: Trwałe połączenie z bazą
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ą
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]
)
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]
Ostatnio zmieniony pt paź 08, 2004 1:23 am przez the_foe, łącznie zmieniany 1 raz.
Re: Trwałe połączenie z bazą
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.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.
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.