1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
<?xml version="1.0" encoding="iso-8859-2"?>
<!-- EN-Revision: 1.14 Maintainer: slawek Status: ready -->
<!-- $Revision: 1.7 $ -->
<chapter id="features.persistent-connections">
<title>Stae poczenia z bazami danych</title>
<simpara>
Stae poczenia (persistent connections) to poczenia, ktre nie s
zamykane po wykonaniu skryptu. Kiedy skrypt prbuje nawiza stae
poczenie, PHP sprawdza czy istnieje ju identyczne poczenie (otwarte
wczeniej) i jeli istnieje, uywa go. Jeeli nie, tworzone
jest nowe. Poczenie 'identyczne' to poczenie z tym samym hostem,
z tak sam nazw uytkownika i hasem.
</simpara>
<simpara>
Ludzie niezbyt dobrze znajcy zasady dziaania serwerw mog czasem
bra stae poczenia za co, czym te nie s. Stae poczenia
<emphasis>nie</emphasis> stwarzaj moliwoci otwarcia poczenia dla
konkretnego uytkonika, <emphasis>nie</emphasis> pozwalaj na skuteczne
stworzenie systemu transakcji, i nie robi wielu innych rzeczy.
Powiedzmy to jasno, stae poczenia nie oferuj <emphasis>nic</emphasis>
ponad to, co robi 'zwyke' poczenia.
</simpara>
<simpara>
Dlaczego?
</simpara>
<simpara>
Jest to zwizane z zasad dziaania serwerw. S trzy sposoby na
ktre serwer moe wykorzystac PHP do generowania stron.
</simpara>
<simpara>
Pierwsza metoda to wykorzystanie PHP jako "wrappera" CGI. Przy wywoaniu
skryptu kadorazowo uruchamiany i niszczony jest egzamplarz PHP. Jako, e
jest on niszczony po kadym wywoaniu, wszystkie zasoby przez niego
posiadane (na przykad poczenia z baz danych) s tracone. W tym przypadku
uywanie staych pocze nie przynosi korzyci, one po prostu nie s stae.
</simpara>
<simpara>
Druga, najpopularniejsza metoda, to uruchomienie PHP jako moduu
w wieloprocesowym serwerze, co obecnie dotyczy jedynie serwera Apache.
Serwer wieloprocesowy zwykle uruchamia jeden proces (rodzica), ktry
koordynuje inne procesy (potomne) zajmujce si dostarczaniem stron.
Kiedy nadchodzi danie od klienta, jest ono przekazywane jednemu z
procesw potomnych, ktry w danym momencie nie obsuguje innego klienta.
Oznacza to, e gdy ten sam klient wyle do serwera kolejne danie, moe
zosta obsuony przez inny proces ni za pierwszym razem. Stae poczenie
w tym przypadku oznacza, e kady proces potomny ustanawia poczenie
z serwerem SQL przy pierwszym wywoaniu strony, ktra takiego poczenia
uywa. Jeli inna strona potrzebuje poczenia z serwerem SQL, moe
wykorzysta poczenie, ktre dany proces ustanowi wczeniej.
</simpara>
<simpara>
Ustatnia metoda to wykorzystanie PHP jako wtyczki (plug-in) do
serwera wielowtkowego. Obecnie PHP4 zawiera obsug mechanizmw
ISAPI, WSAPI i NSAPI (w Windows), ktre umoliwiaj uruchomienie PHP
jako wtyczki do wielowtkowych serwerw 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
wczeniej modelu wieloprocesowego. Mechanizmy SAPI nie s obsugiwane
przez PHP 3.
</simpara>
<simpara>
Skoro stae poczenia nie dostarczaj wikszej funkcjonalnoci, do czego
mog by przydatne?
</simpara>
<simpara>
Odpowied jest niezwykle prosta -- wydajno. Stae poczenia
sprawdzaj si w przypadku, gdy koszt nawizania poczenia z SQL
serwerem jest wysoki. To czy koszt jest duy czy nie zaley od wielu
czynnikw. Na przykad od typu bazy danych, od tego czy znajduje si
ona na tym samym serwerze, od obcienia maszyny, ktra obsuguje serwer
SQL, itd. Jeli zatem koszt poczenia jest wysoki, stae poczenia
znacznie pomagaj. Sprawiaj, e proces potomny czy si z serwerem SQL
tylko raz podczas swojego ycia, zamiast otwiera poczenie za kadym
razem gdy zada tego skrypt. Oznacza to, e kady proces potomny, ktry
nawiza stae poczenie, bdzie posiada wasne poczenie z serwerem
bazy danych. Dla przykadu, jeeli 20 procesw potomnych uruchomi skrypt,
ktry ustanowi stae poczenie z serwerem SQL, bdziesz mie 20 rnych
pocze z serwerem, jedno na kady proces.
</simpara>
<simpara>
Trzeba jednak zauway, e moe to mie swoje ujemne strony w przypadku
gdy, limit pocze do bazy danych zostanie przekroczony przez stae
poczenia z procesw potomnych. Jeli twoja baza danych posiada limit
szesnastu jednoczesnych pocze, a w danej chwili obcienie jest
wysokie, siedemnasty proces nie bdzie mg si poczy. Jeli twoje
skrypty zawieraj bdy, ktre nie pozwalaj zamkn pocze (na przykd
nieskoczone ptle), baza danych z limitem 32 pocze moe szybko zosta
zapchana. Poszukaj w dokumentacji swojej bazy danych w jaki sposb radzi
sobie ona z porzuconymi lub bezczynnymi poczeniami.
</simpara>
<simpara>
Wane podsumowanie. Stae poczenia zostay zaprojektowane tak, by
odpowiada zwykym poczeniom. Oznacza to, e <emphasis>zawsze</emphasis>
moesz zastpi stae poczenia zwykymi i nie zmieni to zachowania
skryptu. Natomiast <emphasis>moe</emphasis> zmieni (i pewnie zmieni)
jego wydajno!
</simpara>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
|