tom Wed May 22 17:40:19 2002 EDT
Modified files:
/phpdoc-de/features persistent-connections.xml
Log:
sync to en
Index: phpdoc-de/features/persistent-connections.xml
diff -u phpdoc-de/features/persistent-connections.xml:1.7
phpdoc-de/features/persistent-connections.xml:1.8
--- phpdoc-de/features/persistent-connections.xml:1.7 Wed Dec 12 15:46:06 2001
+++ phpdoc-de/features/persistent-connections.xml Wed May 22 17:40:19 2002
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- EN-Revision: 1.19 Maintainer: tom Status: ready -->
<chapter id="features.persistent-connections">
<title>Persistente Datenbankverbindungen</title>
@@ -12,103 +13,147 @@
'identische' Verbindung ist eine Verbindung, die zu dem
gleichen Host mit dem gleichen Usernamen und Passwort
hergestellt wurde.</simpara>
-
- <simpara>
- Wer nicht durchg�ngig mit der Art und Weise, wie
- Webserver arbeiten und die Last verteilen, vertraut ist, k�nnte
- missverstehen, wof�r persistente Verbindungen gedacht sind.
- Im Besonderen bieten sie <emphasis>keine</emphasis>
- M�glichkeit, 'Benutzersitzungen' auf der gleichen SQL-Verbindung
- zu �ffnen und <emphasis>keine</emphasis> M�glichkeit, eine
- Transaktion aufzubauen, und sie k�nnen viele
- andere Sachen nicht. Um absulute Klarheit zu schaffen:
- Persistente Verbindungen bieten <emphasis>keine</emphasis>
- Funktionalit�t, die nicht auch von nicht-persistenten Verbindungen
- bereitgestellt wird.</simpara>
-
+ <note>
+ <para>
+ Auch andere Erweiterungen bieten persistente Verbindungen, wie z.B.
+ <link linkend="ref.imap">IMAP extension</link>.
+ </para>
+ </note>
+ <simpara>
+ Wer nicht durchg�ngig mit der Art und Weise vertraut ist, wie
+ Webserver arbeiten und die Last verteilen, k�nnte missverstehen,
+ wof�r persistente Verbindungen gedacht sind. Im Besonderen bieten
+ sie <emphasis>keine</emphasis> M�glichkeit, 'Benutzersitzungen'
+ �ber die gleiche SQL-Verbindung zu �ffnen und
+ <emphasis>keine</emphasis> M�glichkeit, eine Transaktion effizient
+ aufzubauen, und sie k�nnen auch viele andere Dinge nicht. Um
+ absolute Klarheit zu schaffen: Persistente Verbindungen bieten
+ <emphasis>keine</emphasis> Funktionalit�t, die nicht auch von
+ nicht-persistenten Verbindungen bereitgestellt wird.
+ </simpara>
<simpara>
- Warum?</simpara>
-
+ Warum?
+ </simpara>
<simpara>
Das hat mit der Arbeitsweise von Webservern zu tun. Es gibt drei
M�glichkeiten, wie ein Webserver PHP zur Generierung von
- Webseiten einsetzen kann.</simpara>
-
+ Webseiten einsetzen kann.
+ </simpara>
<simpara>
Die erste Methode ist, PHP als CGI-'Wrapper' zu benutzen.
Wenn diese Methode eingesetzt wird, wird f�r jede Anfrage
nach einer PHP-Seite vom Webserver eine Instanz des PHP-
- Interpreters gestartet und anschliessend wieder beendet.
+ Interpreters gestartet und anschlie�end wieder beendet.
Durch die Beendigung des Interpreters nach abgeschlossener
Anfrage werden alle Ressourcen, auf die zugegriffen wurde
(wie beispielsweise eine Verbindung zu einem SQL-
- Datenbankserver) wieder geschlossen. In diesem
- Fall erreicht man nichts, wenn man persistente Verbindungen
- benutzt - sie sind eben nicht best�ndig.</simpara>
-
- <simpara>
- Die zweite und popul�rere Methode ist der Einsatz von PHP als
- Modul in einem Multiprozess-Webserver, was momentan nur
- auf den Apache zutrifft. Typischerweise hat ein Multiprozess-
- Webserver einen Prozess (den 'Eltern' Prozess), der einen Satz
- weiterer Prozesse (die 'Kinder') koordiniert, die die eigentliche Arbeit
- des Bereitstellens der Seiten �benehmen. Jede Anfrage, die von
- einen Client erfolgt, wird an einen untergeordneten Prozess, der
+ Datenbankserver) wieder geschlossen. In diesem Fall erreicht
+ man nichts, wenn man persistente Verbindungen benutzt - sie
+ sind eben nicht best�ndig.
+ </simpara>
+ <simpara>
+ Die zweite und popul�rste Methode ist der Einsatz von PHP als
+ Modul in einem Multiprozess-Webserver, was momentan nur auf den
+ Apache zutrifft. Typischerweise hat ein Multiprozess-Webserver
+ einen Prozess (den 'Eltern' Prozess), der einen Satz weiterer
+ Prozesse (die 'Kinder') koordiniert, welche die eigentliche Arbeit
+ des Bereitstellens der Seiten �bernehmen. Jede Anfrage, die von
+ einem Client erfolgt, wird an einen untergeordneten Prozess, der
noch keine andere Anfrage bearbeitet, weitergereicht. Das bedeutet,
- dass eine zweite Anfrage des Clients an den Server unter
+ dass eine zweite Anfrage des gleichen Clients an den Server unter
Umst�nden von einem anderen untergeordneten Prozess als die
erste Anfrage bearbeitet wird. In diesem Fall sorgt eine persistente
Verbindung daf�r, dass jeder untergeordnete Prozess sich nur
einmal mit dem SQL-Server verbinden muss, wenn eine solche
ben�tigt wird. Ben�tigt dann eine weitere Seite die Verbindung mit
dem SQL-Server, kann auf die zur�ckgegriffen werden,
- die der untergeordnete Prozess vorher hergestellt hat.</simpara>
-
+ die der untergeordnete Prozess vorher hergestellt hat.
+ </simpara>
<simpara>
Die letzte Methode ist, PHP als Plug-in f�r einen Multithread-
- Webserver zu benutzen. Momentan ist dies noch Theorie - PHP
- arbeitet noch nicht als Plug-in f�r irgedeinen dieser Server. An
- der Unterst�tzung f�r ISAPI, WSAPI und NSAPI wird gearbeitet,
- so dass die Nutzung von PHP mit Multithread-Serven wie
- Netscape Fast Track, Microsoft Internet Information Server (IIS)
- und O'Reilly's WebSite Pro m�glich wird. Wenn es soweit ist,
- wird das Verhalten im wesentlichen dem oben
- beschriebenen Multiprozess-Modell entsprechen.</simpara>
-
+ Webserver zu benutzen. Derzeit bietet PHP 4 Unterst�tzung f�r
+ ISAPI, WSAPI und NSAPI (unter Windows), wodurch die Nutzung von
+ PHP mit Multithread-Serven wie Netscape Fast Track (iPlanet),
+ Microsoft Internet Information Server (IIS) und O'Reilly's WebSite
+ Pro erm�glicht wird. Das Verhalten entspricht im wesentlichen dem
+ oben beschriebenen Multiprozess-Modell. Beachten Sie, dass PHP 3
+ keine Unterst�tzung f�r SAPI bietet.
+ </simpara>
<simpara>
Wozu dienen persistente Verbindungen, wenn sie keine
- zus�tzliche Funktionalit�t bieten?</simpara>
-
+ zus�tzliche Funktionalit�t bieten?
+ </simpara>
<simpara>
- Die Antwort ist ausserordentlich einfach: Effizienz. Persistente
- Verbindungen sind n�tzlich, wenn die Notwendigkeit, eine
- Verbindung zu einem SQL-Server herzustellen, hoch ist.
- Ob dies der Fall ist oder nicht, h�ngt von vielen Faktoren ab -
- zum Beispiel, um was f�r eine Datenbank es sich handelt, ob
- sie auf dem gleichen Rechner wie der Webserver l�uft oder
- welche Last die SQL-Maschine zu bew�ltigen hat usw.
- Grunds�tzlich gilt, dass, wenn viele Verbindungen hergestellt
- werden m�ssen, persistente Verbindungen ausserordentlich
- hilfreich sind. Sie veranlassen den untergeordneten Prozess,
- sich w�hrend seiner gesamten Lebensdauer lediglich einmal mit
- dem SQL-Server zu verbinden, anstatt jedesmal beim Aufruf
- einer Seite, die eine Verbindung ben�tigt. Das heisst, dass
- jeder untergeordneten Prozess, der eine persistente
- Verbindung �ffnet, eine eigene dauerhafte Verbindung zum
- Server hat. Bei 20 untergeordnete Prozessen, die ein Skript
+ Die Antwort ist au�erordentlich einfach: Effizienz. Persistente
+ Verbindungen sind n�tzlich, wenn der Aufwand f�r das Herstellen
+ einer Verbindung zu einem SQL-Server hoch ist. Ob dies der Fall ist
+ oder nicht, h�ngt von vielen Faktoren ab - zum Beispiel, um welche
+ Datenbank es sich handelt, ob sie auf dem gleichen Rechner wie der
+ Webserver l�uft oder welche Last die SQL-Maschine zu bew�ltigen hat
+ usw. Grunds�tzlich gilt, dass, wenn viele Verbindungen hergestellt
+ werden m�ssen, persistente Verbindungen au�erordentlich hilfreich
+ sind. Sie veranlassen den untergeordneten Prozess, sich w�hrend
+ seiner gesamten Lebensdauer lediglich einmal mit dem SQL-Server zu
+ verbinden, anstatt bei jedem Aufruf einer Seite, die eine Verbindung
+ ben�tigt. Das hei�t, dass jeder untergeordnete Prozess, der eine
+ persistente Verbindung �ffnet, seine eigene dauerhafte Verbindung
+ zum Server hat. Bei 20 untergeordneten Prozessen, die ein Skript
ausf�hren, das eine persistente Verbindung zum SQL-Server
herstellt, hat man beispielsweise 20 verschiedene Verbindungen
- zum SQL-Server - eine f�r jeden untergeordneten Prozess.</simpara>
-
+ zum SQL-Server - eine f�r jeden untergeordneten Prozess.
+ </simpara>
+ <simpara>
+ Beachten Sie jedoch, dass dies auch ein paar Nachteile haben kann,
+ wenn Sie eine Datenbank mit limitierten Verbindungen benutzen, welche
+ durch persistente Verbindungen �berschritten werden. Wenn Ihre Datenbank
+ ein Limit von 16 gleichzeitigen Verbindungen hat, und aufgrund einer
+ stark ausgelasteten Server-Session 17 Kind-Prozesse versuchen, eine
+ Verbindung herzustellen, wird es einem nicht gelingen. Sollten in
+ Ihren Skripten Fehler bestehen, welche das Schlie�en der Verbindungen
+ nicht erlauben (wie z.B. Endlosschleifen), kann das eine Datenbank
+ mit mit nur 32 Verbindungen sehr schnell �berschwemmen. Konsultieren
+ Sie die Dokumentation Ihrer Datenbank bez�glich der Behandlung von
+ aufgegebenen Verbindungen oder Verbindungen im Leerlauf.
+ </simpara>
+ <warning>
+ <simpara>
+ Sie sollten sich zur Vorsicht noch ein paar Gedanken machen, wenn
+ Sie persistente Verbindungen benutzen. Einer ist, wenn Sie �ber eine
+ persistente Verbindung Tabellen sperren und das Skript diese Sperre
+ aus welchem Grund auch immer nicht mehr aufheben kann, nachfolgende
+ Skripte, welche die selbe Verbindung benutzen, blockieren und den
+ Neustart von entweder dem Webserver oder dem Datenbankserver
+ verlangen. Ein weiterer ist, dass wenn Sie Transaktionen benutzen,
+ ein Transaktionsblock zu dem n�chsten die Verbindung nutzenden Skript
+ �bertragen wird, wenn die Ausf�hrung des Skriptes vor dem
+ Transaktionsblock gestoppt wird. In jedem Fall k�nnen Sie
+ <function>register_shutdown_function</function> benutzen, um eine
+ einfache Funktion zu registrieren, welche Ihre Tabellen wieder
+ entsperrt, oder Ihre Transaktionen zur�ckstellt. Besser ist es, wenn
+ Sie dieses Problem g�nzlich vermeiden, indem keine persistenten
+ Verbindungen in Skripten benutzen, welche Tabellen sperren oder
+ Transaktionen verwenden (Sie k�nnen sie immer noch anderswo benutzen).
+ </simpara>
+ </warning>
<simpara>
Eine wichtige Zusammenfassung. Persistente Verbindungen wurden
entwickelt, um eins-zu-eins Abbildungen auf regul�re Verbindungen
- zu haben. Das heisst, dass man <emphasis>immer</emphasis> in der
- Lage sein sollte, die persistenten Verbindungen durch nicht-persistente
+ zu haben. Das hei�t, dass man <emphasis>immer</emphasis> in der Lage
+ sein sollte, die persistenten Verbindungen durch nicht-persistente
zu ersetzten, ohne dass dies den Skriptablauf ver�ndert. Es <emphasis>
kann</emphasis> (und wird vermutlich auch) die Effizienz des Skriptes
- beeinflussen, aber nicht dessen Verhalten.</simpara>
-
+ beeinflussen, aber nicht dessen Verhalten.
+ </simpara>
+ <para>
+ Siehe auch <function>fbsql_pconnect</function>,
+ <function>ibase_pconnect</function>, <function>ifx_pconnect</function>,
+ <function>imap_popen</function>, <function>ingres_pconnect</function>,
+ <function>msql_pconnect</function>, <function>mssql_pconnect</function>,
+ <function>mysql_pconnect</function>, <function>OCIPLogon</function>,
+ <function>odbc_pconnect</function>, <function>Ora_pLogon</function>,
+ <function>pfsockopen</function>, <function>pg_pconnect</function> und
+ <function>sybase_pconnect</function>.
+ </para>
</chapter>
<!-- Keep this comment at the end of the file