PHP: Persistentn� datab�zov� spojen� - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links 
search for in the  
previousObsluha spojen�Bezpe�n� re�imnext
Last updated: Thu, 21 Nov 2002
view the printer friendly version or the printer friendly version with notes or change language to English | Brazilian Portuguese | Chinese | Dutch | Finnish | French | German | Hungarian | Italian | Japanese | Korean | Polish | Romanian | Russian | Slovak | Spanish | Swedish | Turkish

Kapitola 21. Persistentn� datab�zov� spojen�

Trval� spojen� jsou SQL spojen�, kter� se nezav�raj� na konci pr�b�hu skriptu. P�i po�adavku na trval� spojen� PHP nejd��ve zkontroluje, jestli u� neexistuje identick� spojen� (kter� z�stalo otev�eno z d��v�j�ka) - a pokud existuje, pou�ije ho. Pokud neexistuje, PHP ho otev�e. "Identick�" spojen� je spojen�, kter� bylo otev�eno se stejn�m serverem, u�ivatelsk�m jm�nem a heslem (pokud je zad�te).

Pozn�mka: Existuj� i dal�� roz���en�, kter� vytv��� trval� spojen�, nap��klad Roz���en� IMAP.

Lid�, kte�� nejsou d�kladn� obezn�meni se zp�sobem, jak�m web servery funguj� a distribuuj� z�t�, mohou pokl�dat trval� spojen� za n�co ��m nejsou. Zvl�t� neumo��uj� otv�r�n� "u�ivatelsk�ch sessions" na stejn�m SQL spojen�, neumo��uj� efektivn� tvorbu transakc�, a neumo��uj� spoustu dal��ch v�c�. Dokonce, aby o tom bylo opravdu a d�kladn� jasno, v�m trval� spojen� nedaj� ��dnou funkcionalitu, kter� by nebyla mo�n� s jejich netrval�mi prot�j�ky.

Pro�?

To je d�no zp�sobem, jak�m funguj� webov� servery. Jsou t�i zp�soby, jak�mi v� web server m��e vyu��t PHP ke generov�n� webov�ch str�nek.

Prvn� metodou je pou��t PHP jako CGI "obal". V tomto re�imu se vytv��� a ni�� jedna instance PHP interpretru pro ka�d� po�adavek (na PHP strn�nku) na va�em web serveru. Proto�e je zni�ena po obslou�en� po�adavku, v�echny zdroje, kter� z�sk� (jako t�eba spojen� s datab�zov�m serverem) jsou p�i jej�m zni�en� zav�eny. V tomto p��pad� pokusem o pou�it� trval�ch spojen� nic nez�sk�te - prost� nevydr��.

Druhou, a nejpopul�rn�j��, metodou, je provozovat PHP jako modul v multiprocesn�m web serveru, co� je mno�ina, kter� v sou�asnosti obsahuje pouze Apache. Multiprocesn� web server m� typicky jeden proces (rodi�e), kter� ��d� skupinu proces� (sv�ch d�t�), kter� d�laj� vlastn� pr�ci - serv�ruj� str�nky. Ka�d� po�adavek, kter� p�ijde od klienta, je obslou�en jedn�m z d�t�, kter� pr�v� neobsluhuje jin�ho klienta. To znamen�, �e kdy� stejn� klient vznese dal�� po�adavek na stejn� server, tento m��e b�t obslou�en jin�m d�tsk�m procesem ne� ten prvn�. Trval� spojen� zaji��uj�, aby se ka�d� d�tsk� proces musel na v� SQL server p�ihl�sit pouze p�i prvn�m odesl�n� str�nky, kter� takov� spojen� vyu��v�. Kdy� spojen� s SQL serverem vy�aduje dal�� str�nka, m��e pou��t spojen�, kter� toto d�t� otev�elo u� d��ve.

Posledn� metodou je pou��t PHP jako plug-in v multivl�knov�m web serveru. Aktu�ln� PHP 4 m� tuto podporu pro ISAPI, WSAPI a NSAPI (na Windows), co� umo�nuje pou��vat PHP jako plug-in v multivl�knov�ch serverech jako Netscape FastTrack (iPlanet), Microsoft Internet Information Server (IIS), a O'Reilly's WebSite Pro. Chov�n� je stejn� jako u multiprocesn�m modelu popsan�m d��ve. Podpora pro SAPI nen� dostupn� v PHP 3.

Pokud trval� spojen� neposkytuj� ��dnou p�idanou funkcionalitu, k �emu jsou dobr�?

Odpov�� na tuto ot�zku je velmi jednoduch� - efektivita. Trval� spojen� jsou dobr�, pokud m� tvorba spojen� s va��m SQL serverem vysokou re�ii. Re�ln� v��e t�to re�ie z�le�� na mnoha faktorech. Nap��klad jak� je to typ datab�ze, jestli s�dl� na stejn�m po��ta�i jako v� webserver, jak zat�en� je stroj, na kter�m v� SQL server b�� a tak d�le. Pointa je, �e pokud je spojovac� re�ie vysok�, trval� spojen� v�m znateln� pomohou. Umo�n� d�tsk�mu procesu p�ipojit se pouze jednou za cel� jeho �ivotn� cyklus m�sto ka�d�ho zpracov�n� str�nky, kter� vy�aduje spojen� s SQL serverem. To znamen�, �e ka�d� d�t�, kter� otev�elo trval� spojen�, bude m�t otev�en� vlastn� trval� spojen� se serverem. Pokud nap��klad m�te 20 d�tsk�ch proces�, kter� spustily skript, kter� otev�el trval� spojen� s va��m SQL serverem, m�te 20 nez�visl�ch spojen� s SQL serverem, po jednom z ka�d�ho d�t�te.

V�imn�te si nicm�n�, �e to m��e m�t nev�hody, pokud pou��vate datab�zi s omezen�m po�tem p�ipojen�, kter� trval� spojen� d�t� p�ekro��. Pokud m� va�e datab�ze limit 16 sou�asn�ch p�ipojen�, a v ru�n�m okam�iku se pokus� p�ipojit 17 d�tsk�ch proces�, jednomu se to nepoda��. Pokud m�te ve sv�ch skriptech chyby, kter� br�n� zav�r�n� spojen� (nap�. nekone�n� smy�ky), datab�ze s pouh�mi 32 spojen�mi bude brzy zaplavena. Vyhledejte si v dokumentaci va�� datab�ze informace o obsluze opu�t�n�ch nebo ne�inn�ch spojen�.

Varov�n�

Zde je n�kolik dodate�n�ch n�mitek, kter� se usadily v mysli b�hem pou��v�n� trval�ch spojen�. Jedna z nich je, kdy� pou��v�te zamknut� tabulky p�i trval�m spojen� a skript z jak�hokoli d�vodu nem��e uvolnit z�mek, pak n�sleduj�c� skript, kter� pou��v� stejn� spojen�, bude nejsp�e na trvalo zablokov�n a mo�n� bude nutn�, abyste poka�d� restartovali http server nebo datab�zov� server. D�le pak v p��pad� pou�it� transakc� se transak�n� blok p�enese i do dal��ho skriptu pou��vaj�c�ho stejn� spojen�, pokud jeho vykon�n� kon�� d��ve ne� transak�n� blok. V ka�d�m p��pad� m��ete pou��t register_shutdown_function() k registraci a jednoduch�mu vy�i�t�n� funkce pro odemknut� tabulek nebo zru�en� b��c� transakce (roll back). Nejl�pe se probl�mu vyvarujete �pln� nepou��v�n�m trval�ch spojen� ve skriptech, ve kter�ch se zamykaj� tabulky nebo pou��vaj� transakce (m��ete je st�le pou��vat na mnoh�ch dal��ch m�stech).

D�le�it� souhrn. Trval� spojen� byla navr�ena tak, aby odpov�dala jedna k jedn� norm�ln�m spojen�m. To znamen�, �e byste v�dy m�li b�t schopni nahradit trval� spojen� netrval�mi beze zm�ny fungov�n� va�eho skriptu. M��e to (a pravd�podobn� bude) m�t vliv na efektivitu tohoto skriptu, ale ne jeho chov�n�!

D�le tak�: fbsql_pconnect(), ibase_pconnect(), ifx_pconnect(), imap_popen(), ingres_pconnect(), msql_pconnect(), mssql_pconnect(), mysql_pconnect(), OCIPLogon(), odbc_pconnect(), Ora_pLogon(), pfsockopen(), pg_pconnect() a sybase_pconnect().

User Contributed Notes
Persistentn� datab�zov� spojen�
add a note about notes
sebastian at flothow dot de
18-Apr-2000 02:28

Yes, with nonpersistent connections database connections last only while a database-related request is processed, thus reducing the load on the database server.
However, latency will be somewhat higher since a database connection must be opened before a request can be handeled.

jean_christian at myrealbox dot com
15-Aug-2002 10:13

If anyone ever wonders why the number of idle db process (open connections) seems to grow even though you are using persistent connections, here's why:

"You are probably using a multi-process web server such as Apache. Since
database connections cannot be shared among different processes a new
one is created if the request happen to come to a different web server
child process."

add a note about notes
previousObsluha spojen�Bezpe�n� re�imnext
Last updated: Thu, 21 Nov 2002
show source | credits | stats | mirror sites
Copyright © 2001, 2002 The PHP Group
All rights reserved.
This mirror generously provided by:
Last updated: Sat Nov 23 08:09:47 2002 CET