PHP Conference Nagoya 2025

Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

OCI8-Konfigurationsoptionen
Name Standard Veränderbar Changelog
oci8.connection_class "" INI_ALL  
oci8.default_prefetch "100" INI_SYSTEM  
oci8.events Off INI_SYSTEM  
oci8.max_persistent "-1" INI_SYSTEM  
oci8.old_oci_close_semantics Off INI_SYSTEM Ab PHP 8.1.0 veraltet.
oci8.persistent_timeout "-1" INI_SYSTEM  
oci8.ping_interval "60" INI_SYSTEM  
oci8.prefetch_lob_size "0" INI_SYSTEM Verfügbar seit PECL OCI8 3.2.
oci8.privileged_connect Off INI_SYSTEM  
oci8.statement_cache_size "20" INI_SYSTEM  

Hier eine kurze Erklärung der Konfigurationsoptionen:

oci8.connection_class string

Dieser benutzerdefinierte Text sollte immer festgelegt werden, wenn Oracle Database Resident Connection Pooling (DRCP) verwendet wird. Er ermöglicht die Partitionierung des DRCP-Verbindungspools, sodass persistente OCI8-Verbindungen einer Anwendung Datenbanksessions aus einem vorherigen PHP-Skript wiederverwenden können, was eine bessere Skalierbarkeit ermöglicht. Wenn eine Anwendung einen Datenbankpool-Prozess verwendet, der zuvor mit einer anderen Verbindungsklasse verwendet wurde, werden die Session-Einstellungen, z. B. das standardmäßige Oracle-Datumsformat, zurückgesetzt. Dies verhindert eine versehentliche gemeinsame Nutzung von Informationen zwischen verschiedenen Anwendungen.

Der Wert kann zur Laufzeit vor dem Aufbau der Verbindung mit ini_set() gesetzt werden.

Um DRCP zu verwenden, muss OCI8 gegen Bibliotheken von Oracle 11g (oder höher) gelinkt sein und die Datenbank muss Oracle 11g (oder höher) sein. Der DRCP-Verbindungspool muss in der Datenbank aktiviert sein, die oci8.connection_class muss für alle Webserver, auf denen dieselbe Anwendung läuft, auf dieselbe Zeichenkette gesetzt werden und die OCI8-Verbindungszeichenkette muss angeben, dass ein Server mit einem Pool verwendet werden soll. Die Anwendung sollte persistente Verbindungen verwenden.

oci8.default_prefetch int

Diese Option legt die Standard-Anzahl der zusätzlichen Zeilen fest, die automatisch abgerufen und zwischengespeichert werden, wenn eine Low-Level-Anforderung von Daten aus der Datenbank erfolgt. Das Setzen des Wertes 0 deaktiviert das Prefetching.

Der Prefetch-Wert ändert nicht die Anzahl der Zeilen, die Funktionen wie oci_fetch_array() an den Benutzer zurückgeben; das Prefetching und Caching von Zeilen wird intern in OCI8 verwaltet.

Der Wert kann pro Anweisung mit oci_set_prefetch() vor der Ausführung der Anweisung gesetzt werden.

Bei Verwendung von Oracle Database 12c (oder höher) kann der von PHP festgelegte Prefetch-Wert von Oracles Client-Konfigurationsdatei oraaccess.xml überschrieben werden. Siehe in der Oracle-Dokumentation für weitere Details.

Hinweis: Ein größerer Prefetch kann zu einer verbesserten Leistung führen, allerdings auf Kosten eines erhöhten Speicherverbrauchs. Bei Abfragen, die große Datenmengen zurückgeben, kann der Leistungsvorteil deutlich sein.

oci8.events bool

Wenn diese Option aktiv ist (On), kann PHP über FAN- (Fast Application Notification) Datenbankereignisse benachrichtigt werden.

Ohne FAN kann es bei einem plötzlichen Ausfall einer Datenbankinstanz oder eines Rechnerknotens dazu kommen, dass PHP-Anwendungen beim Warten auf eine Datenbankantwort hängen bleiben, bis der TCP-Timeout abgelaufen ist. Mit FAN-Ereignissen werden PHP-Anwendungen schnell über Fehler informiert, die Datenbankverbindungen betreffen. Die OCI8-Erweiterung entfernt unbrauchbare Verbindungen aus dem persistenten Verbindungscache.

Wenn diese Option verwendet wird (On), muss die Datenbank auch konfiguriert werden, FAN-Ereignisse zu melden.

Die FAN-Unterstützung ist verfügbar, wenn OCI8 gegen Bibliotheken von Oracle 10gR2 (oder höher) gelinkt ist und mit einer Oracle-Datenbank 10gR2 (oder höher) verbunden ist.

oci8.max_persistent int

Die maximale Anzahl persistenter OCI8-Verbindungen pro PHP-Prozess. Wenn diese Option auf -1 gesetzt ist, ist die Anzahl der Verbindungen nicht limitiert.

oci8.old_oci_close_semantics bool

Diese Option kontrolliert das Verhalten der Funktion oci_close(). Wenn sie aktiviert wird, zeigt der Aufruf von oci_close() keine Reaktion; die Verbindung wird nicht vor dem Ende des Skripts beendet. Die Funktion existiert nur aus Gründen der Abwärtskompatibilität. Wenn Sie in eine Situation kommen, in der Sie diese Option aktivieren müssen, sei Ihnen dringend empfohlen, stattdessen alle oci_close()-Aufrufe aus Ihrer Anwendung zu entfernen.

oci8.persistent_timeout int

Die maximale Dauer (in Sekunden), über die der angegebene Prozess eine ungenutzte persistente Verbindung aufrechterhalten darf. Ist diese Option auf -1 gesetzt, werden ungenutzte persistente Verbindungen aufrecht erhalten, bis der PHP-Prozess endet oder die Verbindung mittels oci_close() ausdrücklich geschlossen wird.

Hinweis: In PHP ist das Ablaufen ungenutzter Ressourcen nicht alarmgesteuert. Es erfolgt, wenn PHP die Verarbeitung eines Skripts beendet und den Zeitstempel der zuletzt verwendeten Ressourcen überprüft. Dies führt zu dem Paradoxon, dass ungenutzte Verbindungen nur geschlossen werden können, wenn es im PHP-Prozess irgendeine Aktivität gibt (wenn auch nicht unbedingt OCI8-bezogen). Wenn es mehr als einen PHP-Prozess gibt, muss jeder Prozess einzeln aktiviert werden, um den Ablauf der seiner ungenutzten Ressourcen auszulösen. Die Einführung von Database Resident Connection Pooling (DRCP) in Oracle 11g behebt die Speicher- und Ressourcenprobleme, die oci8.max_persistent und oci8.persistent_timeout zuvor versuchten, zu beheben.

oci8.ping_interval int

Die Dauer (in Sekunden), die vergehen muss, bevor ein Ping während eines oci_pconnect() abgeschickt wird. Ein Ping stellt sicher, dass die Datenbankverbindung gültig ist. Wenn dies auf 0 gesetzt ist, werden persistente Verbindungen bei jeder Verwendung von oci_pconnect() gepingt. Um Pings völlig zu deaktivieren, muss die Option auf -1 gesetzt werden.

Hinweis: Das Deaktivieren von Pings lässt oci_pconnect() mit höchster Effizienz arbeiten, kann aber dazu führen, dass PHP unbrauchbare Verbindungen nicht bemerkt, die z. B. entstehen können, wenn das Netzwerk unterbrochen wird oder der Oracle-Server bei bestehender Verbindung heruntergefahren wird. Konsultieren Sie die Dokumentation zu oci_pconnect(), um weitere Informationen zu erhalten.

oci8.prefetch_lob_size int

Dies ist ein Optimierungsparameter, der die interne Pufferung von LOB-Daten betrifft. Wenn dieser Wert erhöht wird, kann dies die Leistung beim Abrufen von kleineren LOBs verbessern, indem die Anzahl der Umläufe (Roundtrips) zwischen PHP und der Datenbank reduziert wird. Die Speichernutzung wird sich ändern.

Der Wert betrifft LOBs, die als Instanzen von OCILob zurückgegeben werden und auch solche die unter Verwendung von OCI_RETURN_LOBS zurückgegeben werden.

Der Wert kann bei jeder Anweisung mittels oci_set_prefetch_lob() vor der Ausführung der Anweisung festgelegt werden.

Hinweis: Zu verwenden mit Oracle Database 12.2 oder höher.

oci8.privileged_connect bool

Diese Option aktiviert privilegierte Verbindungen unter Verwendung externer Berechtigungen (OCI_SYSOPER oder OCI_SYSDBA).

Hinweis: Wenn diese Option auf On gesetzt ist, können Webserver-Skripte, die über die entsprechenden Systembenutzerrechte verfügen, eine Verbindung zur Datenbank mit diesen Rechten herstellen, ohne ein Passwort für die Datenbank angeben zu müssen. Dies kann ein Sicherheitsrisiko darstellen.

oci8.statement_cache_size int

Diese Option aktiviert den Anweisungs-Cache und definiert, wie viele Anweisungen gecacht werden. Um das Caching zu deaktivieren, muss die Option auf 0 gesetzt werden.

Durch das Anweisungs-Caching entfällt die Notwendigkeit, den Anweisungstext an die Datenbank zu übermitteln, und es müssen auch keine Metadaten über die Anweisung zurück an PHP übertragen werden. Dies kann die Gesamtleistung des Systems in Anwendungen, die Anweisungen während der Lebensdauer einer Verbindung wiederverwenden, deutlich verbessern. Einige zusätzliche Datenbank-"Cursor" werden möglicherweise unter der Annahme offen gehalten, dass Anweisungen wiederverwendet werden.

Setzen Sie diesen Wert auf die Größe der aktuellen Menge an Anweisungen, die von Ihrer Anwendung verwendet wird. Die Einstellung eines zu kleinen Wertes kann dazu führen, dass Anweisungen aus dem Cache entfernt werden, bevor sie wiederverwendet werden.

Diese Option ist vor allem bei persistenten Verbindungen von Nutzen.

Wenn Sie Oracle Database 12c (oder höher) verwenden, kann dieser Wert von Oracles Client-Datei oraaccess.xml überschrieben und automatisch eingestellt werden. Siehe die Oracle-Dokumentation für weitere Details.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top