Zacznijmy kurs

Stałe połączenia z bazami danych

Rozdział 41. Stałe połączenia z bazami danych

Stałe połączenia (persistent connections) to połączenia, które nie są zamykane po wykonaniu skryptu. Kiedy skrypt próbuje nawiązać stałe połączenie, PHP sprawdza czy istnieje już identyczne połączenie (otwarte wcześniej) i jeśli istnieje, używa go. Jeżeli nie, tworzone jest nowe. Połączenie 'identyczne' to połączenie z tym samym hostem, z taką samą nazwą użytkownika i hasłem.

Ludzie niezbyt dobrze znający zasady działania serwerów mogą czasem brać stałe połączenia za coś, czym te nie są. Stałe połączenia nie stwarzają możliwości otwarcia połączenia dla konkretnego użytkonika, nie pozwalają na skuteczne stworzenie systemu transakcji, i nie robią wielu innych rzeczy. Powiedzmy to jasno, stałe połączenia nie oferują nic ponad to, co robią 'zwykłe' połączenia.

Dlaczego?

Jest to związane z zasadą działania serwerów. Są trzy sposoby na które serwer może wykorzystac PHP do generowania stron.

Pierwsza metoda to wykorzystanie PHP jako "wrappera" CGI. Przy wywołaniu skryptu każdorazowo uruchamiany i niszczony jest egzamplarz PHP. Jako, że jest on niszczony po każdym wywołaniu, wszystkie zasoby przez niego posiadane (na przykład połączenia z bazą danych) są tracone. W tym przypadku używanie stałych połączeń nie przynosi korzyści, one po prostu nie są stałe.

Druga, najpopularniejsza metoda, to uruchomienie PHP jako modułu w wieloprocesowym serwerze, co obecnie dotyczy jedynie serwera Apache. Serwer wieloprocesowy zwykle uruchamia jeden proces (rodzica), który koordynuje inne procesy (potomne) zajmujące się dostarczaniem stron. Kiedy nadchodzi żądanie od klienta, jest ono przekazywane jednemu z procesów potomnych, który w danym momencie nie obsługuje innego klienta. Oznacza to, że gdy ten sam klient wyśle do serwera kolejne żądanie, może zostać obsłużony przez inny proces niż za pierwszym razem. Stałe połączenie w tym przypadku oznacza, że każdy proces potomny ustanawia połączenie z serwerem SQL przy pierwszym wywołaniu strony, która takiego połączenia używa.

Ostatnia metoda to wykorzystanie PHP jako wtyczki (plug-in) do serwera wielowątkowego. Obecnie PHP4 zawiera obsługę mechanizmów ISAPI, WSAPI i NSAPI (w Windows), które umożliwiają uruchomienie PHP jako wtyczki do wielowątkowych serwerów takich jak Netscape FastTrack (iPlanet), Microsoft Internet Information Server (IIS) i O'Reilly WebSite Pro. Zachowanie PHP jest zasadniczo takie samo jak w przypadku opisanego wcześniej modelu wieloprocesowego. Mechanizmy SAPI nie są obsługiwane przez PHP 3.

Skoro stałe połączenia nie dostarczają większej funkcjonalności, do czego mogą być przydatne?

Odpowiedź jest niezwykle prosta -- wydajność. Stałe połączenia sprawdzają się w przypadku, gdy koszt nawiązania połączenia z SQL serwerem jest wysoki. To czy koszt jest duży czy nie zależy od wielu czynników. Na przykład od typu bazy danych, od tego czy znajduje się ona na tym samym serwerze, od obciążenia maszyny, która obsługuje serwer SQL, itd. Jeśli zatem koszt połączenia jest wysoki, stałe połączenia znacznie pomagają. Sprawiają, że proces potomny łączy się z serwerem SQL tylko raz podczas swojego życia, zamiast otwierać połączenie za każdym razem gdy zażąda tego skrypt. Oznacza to, że każdy proces potomny, który nawiązał stałe połączenie, będzie posiadał własne połączenie z serwerem bazy danych. Dla przykładu, jeżeli 20 procesów potomnych uruchomi skrypt, który ustanowi stałe połączenie z serwerem SQL, będziesz mieć 20 różnych połączeń z serwerem, jedno na każdy proces.

Trzeba jednak zauważyć, że może to mieć swoje ujemne strony w przypadku, gdy limit połączeń do bazy danych zostanie przekroczony przez stałe połączenia z procesów potomnych. Jeśli twoja baza danych posiada limit szesnastu jednoczesnych połączeń, a w danej chwili obciążenie jest wysokie, siedemnasty proces nie będzie mógł się połączyć. Jeśli twoje skrypty zawierają błędy, które nie pozwalają zamknąć połączeń (na przykłąd nieskończone pętle), baza danych z limitem 16 połączeń może szybko zostać zapchana. Poszukaj w dokumentacji swojej bazy danych w jaki sposób radzi sobie ona z porzuconymi lub bezczynnymi połączeniami.

Ostrzeżenie

Istnieje kilka zagrożeń, które należy brać pod uwagę decydując się na używanie stałych połączeń. Jednym z nich jest sytuacja, w której skrypt blokujący tabelę, z jakiegokolwiek powodu nie może zdjąć blokady. Wtedy kolejne skrypty korzystające z tego samego połączenia będą zablokowane i może zajść potrzeba ponownego uruchomienia serwera httpd lub serwera bazy danych. Kolejne zagrożenie dotyczy transakcji. Jeśli skrypt używający transakcji zakończy działanie przed zakończeniem bloku transakcji, to zostanie on (blok) przeniesiony do następnego skryptu. W obu przypadkach można użyć register_shutdown_function(), aby zarejestrować funkcję porządkującą, która odblokuje tabele lub wycofa transakcje. Najlepiej jednak jest zrezygnować ze stałych połączeń w skryptach używających blokowania tabel lub transakcji.

Istotne podsumowanie. Stałe połączenia zostały zaprojektowane tak, by odpowiadać zwykłym połączeniom. Oznacza to, że zawsze możesz zastąpić stałe połączenia zwykłymi i nie zmieni to zachowania skryptu. Natomiast może zmienić (i zapewne zmieni) jego wydajność!

Zobacz także fbsql_pconnect(), ibase_pconnect(), ifx_pconnect(), ingres_pconnect(), msql_pconnect(), mssql_pconnect(), mysql_pconnect(), ociplogon(), odbc_pconnect(), ora_plogon(), pfsockopen(), pg_pconnect() i sybase_pconnect().



WÄ…tki z forum o php

Najnowsze posty naszych userów

nie w³±cza sie ca³kowicie instalator systemu win xp.
witam, chcê mojej dziewczynie sformatowaæ komputer, po ustawieniu kolejno¶ci bootowania, resetuje komputer, wk³adam plyte z windowsem, i pojawia sie czarny ekran z informacja, ze wlacza sie instalator windows, potem pojawia sie niebeiski ekran z napisem instalator rozpakowywuje pliki i wtym momencie komputer staje, dysk przestaje sie krecic i naped tez, cos jakby zawieszka, dzieje sie to zarowno w przypadku winxp 1 wer. jak i ta z sp2. prosze o pomoc,

plyta glowna ECS, proc. Athlon 1GHz.
dual layer czy Double layer
Witam


Patrzê w everest jakie p³yty obs³uguje moja nagrywarka dvd.I przy jednej opcji pisze DVD+R9 Dual Layer czym¶ siê rózni od duble layer?I czy mogê kupiæ p³ytki duble layer aby je nagraæ? czy musz± byæ dual layer



Kaszanka dobra do wszystkiego [+18]
Drogie Bravo, drodzy koledzy i kole¿anki.Mam na imiê Dagmara i mam 19 lat. Moja sytuacja jest bardzo krepuj±ca i nie wiem co teraz mam zrobiæ. Jestem ju¿ doros³± dziewczyn± i mam wspania³ego ch³opaka o imieniu Marcin, którego kocham ponad ¿ycie i my¶lê ze on odwzajemnia moje uczucie. Jeste¶my ju¿ razem 6 miesiêcy i postanowili¶my dokonaæ Aktu Mi³osnego, aby umocniæ nasz zwi±zek. Nie fart polega na tym ¿e ja jestem dziewic±, a z tego co wiem On jest ju¿ do¶wiadczonym mê¿czyzn±. Bardzo obawia³am siê ¿e nie spe³niê jego oczekiwa , po prostu zawiodê! Na dodatek wszystkie moje kole¿anki potraci³y ju¿ dziewictwo i ¿eby mieæ o czym rozmawiaæ z nimi, powiedzia³am ¿e ja równie¿ nie jestem jak to siê mówi potocznie "cnotk±". O tym fakcie dowiedzia³ siê Marcin od mojej kole¿anki, Moniki, która jest jego dobr± znajom±. Gdy Marcin zapyta³ czy to prawda nie zaprzeczy³am. Ustalili¶my nasz Pierwszy Raz na najbli¿szy weekend, poniewa¿ Marcina rodzice jad± na wesele. Bardzo siê obawia³am bólu, oraz tego ¿e Marcin pos±dzi mnie o k³amstwo, wiêc postanowi³am jako¶ sobie poradziæ. Nie chcia³am przespaæ siê z "pierwszym lepszym" gdy¿ kocham Marcina i chcê aby to on by³ moim Pierwszym Mê¿czyzn±!! Akurat zdarzy³o siê tak ¿e by³am sama w domu i postanowi³am uporaæ siê z moja b³ona dziewicz±. Nie chcia³am robiæ tego palcami ani jakim¶ twardym przedmiotem a na wibrator niestety nie by³o by mnie staæ. Posz³am wiêc do lodówki i zobaczy³am nadaj±c± siê do mojego czynu kaszankê. Odpowiada³a mi rozmiarem i grubo¶ci±, by³a trochê za zimna i za twarda wiêc postanowi³am ja podgotowaæ. Kiedy nareszcie ostyg³a, nasmarowa³am ja wazelin±, i zaczê³am wk³adaæ j± do pochwy. Podda³am siê chyba za bardzo chwili i za bardzo j± ¶cisnê³am. Wtedy sta³o siê najgorsze co mog³o siê staæ!! KASZANKA SIÊ Z£AMA£A!!!!!!!!!!Rozpaczliwie próbowa³am j± wyj±æ palcami ale chyba trochê za bardzo j± rozgotowa³am i niektóre kawa³ki kaszanki zosta³y mi w pochwie i nie mogê ich wyj±æ! Wstydzê siê i¶æ do ginekologa a za kilka dni wyczekiwany przez nasz± dwójkê upojny weekend!! Nie wiem co mam zrobiæ i do kogo siê zwróciæ. Co teraz pomy¶li o mnie Marcin!! B£AGAM POMÓ¯CIE!!!!!
Zrozpaczona

Odpowied¼ Bravo:
Na wstêpie pragniemy podziêkowaæ Ci za podzielenie siê z nami swoim problemem. W twojej nader ciekawej sytuacji proponujemy Ci dwa rozwi±zania:
1. Ekstrawaganckie w stylu new art.
2. Si³owe

Pierwsze wydaje nam siê ciekawe lecz mo¿e nie przynie¶æ spodziewanych efektów. Musisz pokroiæ cebulê w kostkê, a nastêpnie podsma¿yæ j± na z³ocisty kolor na patelni (koniecznie na oleju z pierwszego tloczenia). Nastêpnie musisz dopchaæ j± do pochwy i zrobiæ 3-4 przysiadów tak aby zmiesza³a siê z kaszank±. Potem zapro¶ swojego ukochanego na romantyczne spotkanie inicjuj±ce. Przed pierwszym stosunkiem zaproponujesz mu wiêc kaszankê po staropolsku w wersji francuskiej. W ten sposób osi±gniesz dwa cele: udowodnisz mu, ¿e bardzo go kochasz i jednocze¶nie poka¿esz, ¿e ¶wietnie gotujesz. Przypominamy Ci powiedzenie "PRZEZ ¯O£¡DEK DO SERCA".

Rozwi±zanie drugie jest jednak o wiele bardziej skuteczne. Przygotuj patelniê na której mia³a¶ zarumieniæ cebulkê. Nastêpnie we¼ j± w praw± rêkê (je¶li jeste¶ leworêczna to w lew±) i [beeep]nij siê ni± z ca³ej si³y w g³owê - bo tobie to ju¿ chyba nic nie pomo¿e!
Z powa¿aniem Redakcja


Problemem bylo to, ze autor nie pozostawil mozliwosci zmian, wiec za pomoca programu PHP WebPage Editor zmienilem pewne potrzebne mi wartosci (ilosci wojsk - to akurat bylo latwe do znalezienia...), ale nie wiem, ktore wartosci odpowiadaja za czas wysylania tych jednostek wojska - chce zmienic z tych kilkunastu sekud na ok 1,5 godz... (to dziwne, bo nie jest to regularne - niektore ataki wychodza co 10 sek, niektore co 15 albo 20.