Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
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
undoci8.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.