phpday 2025 - Call For Papers

Laufzeit-Konfiguration

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

Konfigurationsoptionen für den MySQL Native Driver
Name Standard Veränderbar Changelog
mysqlnd.collect_statistics "1" INI_SYSTEM  
mysqlnd.collect_memory_statistics "0" INI_SYSTEM  
mysqlnd.debug "" INI_SYSTEM  
mysqlnd.log_mask 0 INI_ALL  
mysqlnd.mempool_default_size 16000 INI_ALL  
mysqlnd.net_read_timeout "86400" INI_ALL Vor PHP 7.2.0 war der Standardwert "31536000" und die Veränderbarkeit war INI_SYSTEM
mysqlnd.net_cmd_buffer_size "4096" INI_SYSTEM  
mysqlnd.net_read_buffer_size "32768" INI_SYSTEM  
mysqlnd.sha256_server_public_key "" INI_PERDIR  
mysqlnd.trace_alloc "" INI_SYSTEM  
mysqlnd.fetch_data_copy 0 INI_ALL Entfernt seit PHP 8.1.0
Weitere Details und die Definitionen der INI_*-Konstanten sind unter Wo Konfigurationseinstellungen gesetzt werden können zu finden.

Hier eine kurze Erklärung der Konfigurationsoptionen:

mysqlnd.collect_statistics bool

Aktiviert das Sammeln verschiedener Client-Statistiken, auf die über mysqli_get_client_stats() und mysqli_get_connection_stats() zugegriffen werden kann, und die auch von der Funktion phpinfo() im Abschnitt mysqlnd ausgegeben werden.

Diese Konfigurationseinstellung aktiviert alle Statistiken des MySQL Native Drivers mit Ausnahme derjenigen, die sich auf die Speicherverwaltung beziehen.

mysqlnd.collect_memory_statistics bool

Aktiviert das Sammeln verschiedener Speicherstatistiken, auf die über mysqli_get_client_stats() und mysqli_get_connection_stats() zugegriffen werden kann, und die auch von der Funktion phpinfo() im Abschnitt mysqlnd ausgegeben werden.

Diese Konfigurationseinstellung aktiviert die Statistiken zur Speicherverwaltung innerhalb der gesamten Statistiken des MySQL Native Drivers.

mysqlnd.debug string

Zeichnet die Kommunikation aller Erweiterungen, die mysqlnd verwenden, in der angegebenen Protokolldatei auf.

Das Format der Direktive ist mysqlnd.debug = "option1[,parameter_option1][:option2[,parameter_option2]]".

Folgende Optionen stehen für die Formatzeichenkette zur Verfügung:

  • A[,file] - Hängt die Trace-Ausgabe an die angegebene Datei an. Stellt außerdem sicher, dass die Daten nach jedem Schreibvorgang geschrieben werden. Zu diesem Zweck wird die Trace-Datei geschlossen und erneut geöffnet (was recht langsam ist). Dies trägt dazu bei, dass auch bei einem Absturz der Anwendung eine vollständige Protokolldatei vorhanden ist.

  • a[,file] - Hängt die Trace-Ausgabe an die angegebene Datei an.

  • d - Aktiviert die Ausgabe des Makros DBUG_<N> für den aktuellen Zustand. Es kann eine Liste mit Schlüsselwörtern angehängt werden, um nur die Ausgaben des DBUG-Makros auszuwählen, die diese Schlüsselwörter enthalten. Wenn eine leere Liste angegeben wird, werden alle Makros ausgegeben.

  • f[,functions] - Beschränkt die Aktivitäten des Debuggers auf die angegebene Liste von Funktionen. Eine leere Liste impliziert, dass alle Funktionen ausgewählt werden.

  • F - Versieht jede Zeile der Debugger-Ausgabe mit dem Namen der Quelldatei, die das Makro enthält, das die Ausgabe verursacht.

  • i - Versieht jede Zeile der Debugger-Ausgabe mit der PID des aktuellen Prozesses.

  • L - Versieht jede Zeile der Debugger-Ausgabe mit dem Namen der Quelldatei, die das Makro enthält, sowie der Zeile des Makros, das diese Ausgabe verursacht.

  • n - Versieht jede Zeile der Debugger-Ausgabe mit der aktuellen Tiefe der Funktionsverschachtelung

  • o[,file] - Ähnlich wie a[,file], überschreibt aber die alte Datei und hängt nicht an sie an.

  • O[,file] - Ähnlich wie A[,file], überschreibt aber die alte Datei und hängt nicht an sie an.

  • t[,N] - Aktiviert die Verfolgung des Kontrollflusses einer Funktion. Die maximale Verschachtelungstiefe wird durch N angegeben. Die Voreinstellung für N ist 200.

  • x - Aktiviert die Erstellung von Profilen.

  • m - Verfolgt die mit der Speicherzuweisung und -freigabe verbundenen Aufrufe.

Beispiel:

d:t:x:O,/tmp/mysqlnd.trace

Hinweis:

Dieses Funktionalität steht nur mit einem sogenannten Debug-Build von PHP zur Verfügung.

mysqlnd.log_mask int

Legt fest, welche Abfragen protokolliert werden sollen. Der Standardwert ist 0, was die Protokollierung deaktiviert. Die Definition erfolgt mit einer Ganzzahl und nicht mit PHP-Konstanten. Ein Wert von 48 (16 + 32) protokolliert zum Beispiel langsame Abfragen, die entweder einen fehlerhaften Index ("no good index") (SERVER_QUERY_NO_GOOD_INDEX_USED = 16) oder überhaupt keinen Index (SERVER_QUERY_NO_INDEX_USED = 32) verwenden. Ein Wert von 2043 (1 + 2 + 8 + ... + 1024) protokolliert alle langsamen Abfragetypen.

Folgende Typen stehen zur Verfügung: SERVER_STATUS_IN_TRANS=1, SERVER_STATUS_AUTOCOMMIT=2, SERVER_MORE_RESULTS_EXISTS=8, SERVER_QUERY_NO_GOOD_INDEX_USED=16, SERVER_QUERY_NO_INDEX_USED=32, SERVER_STATUS_CURSOR_EXISTS=64, SERVER_STATUS_LAST_ROW_SENT=128, SERVER_STATUS_DB_DROPPED=256, SERVER_STATUS_NO_BACKSLASH_ESCAPES=512 und SERVER_QUERY_WAS_SLOW=1024.

mysqlnd.mempool_default_size int

Die voreingestellte Größe des mysqlnd-Speicherbereichs, der von den Ergebnismengen verwendet wird.

mysqlnd.net_read_timeout int

mysqlnd und die MySQL Client Library libmysqlclient verwenden unterschiedliche Netzwerk-APIs. So verwendet mysqlnd PHP-Streams, während libmysqlclient den eigenen Wrapper für die Netzwerkaufrufe der Betriebssystemebene verwendet. PHP setzt für das Lesen von Streams standardmäßig ein Zeitlimit von 60s. Dies wird in der php.ini über default_socket_timeout eingestellt. Diese Vorgabe gilt für alle Streams, die keinen anderen Wert für das Zeitlimit setzen. mysqlnd setzt keinen anderen Wert, weshalb Verbindungen von lang laufenden Abfragen nach default_socket_timeout Sekunden getrennt werden können, was die Fehlermeldung 2006 - MySQL Server has gone away zur Folge hat. Die MySQL Client Library setzt standardmäßig ein Zeitlimit von 24 * 3600 Sekunden (1 Tag) und wartet auf andere Zeitlimits, z. B. TCP/IP-Zeitlimits. mysqlnd benutzt nun das gleiche sehr lange Zeitlimit. Der Wert ist über eine neue Einstellung in der php.ini konfigurierbar: mysqlnd.net_read_timeout. mysqlnd.net_read_timeout wird von jeder Erweiterung verwendet, die mysqlnd verwendet (ext/mysql, ext/mysqli und PDO_MySQL). mysqlnd weist PHP-Streams an, mysqlnd.net_read_timeout zu verwenden. Zu beachten ist, dass es subtile Unterschiede zwischen MYSQL_OPT_READ_TIMEOUT aus der MySQL Client Library und PHP-Streams geben kann. Zum Beispiel gilt MYSQL_OPT_READ_TIMEOUT laut Dokumentation nur für TCP/IP-Verbindungen und, vor MySQL 5.1.2, nur unter Windows. PHP-Streams haben diese Einschränkung möglicherweise nicht. Im Zweifelsfall sollte die Dokumentation von Streams zu Rate gezogen werden.

mysqlnd.net_cmd_buffer_size int

mysqlnd weist jeder Verbindung einen internen Befehls-/Netzwerkpuffer von mysqlnd.net_cmd_buffer_size Bytes zu (in der php.ini). Wenn ein Befehl des MySQL-Client-Server-Protokolls, zum Beispiel COM_QUERY (normale Abfrage), nicht in den Puffer passt, vergrößert mysqlnd den Puffer auf die für das Senden des Befehls erforderliche Größe. Jedes Mal, wenn der Puffer für eine Verbindung erweitert wird, wird command_buffer_too_small um eins erhöht.

Wenn mysqlnd den Puffer bei fast jeder Verbindung über seine anfängliche Größe von mysqlnd.net_cmd_buffer_size Bytes hinaus vergrößern muss, sollten in Betracht gezogen werden, die Standardgröße zu erhöhen, um Neuzuweisungen zu vermeiden.

Die voreingestellte Puffergröße beträgt 4096 Bytes, was der kleinstmögliche Wert ist.

Der Wert kann auch mittels mysqli_options(link, MYSQLI_OPT_NET_CMD_BUFFER_SIZE, size) gesetzt werden.

mysqlnd.net_read_buffer_size int

Die maximale Größe des gelesenen Teilstücks in Bytes, wenn der Inhalt eines MySQL-Befehlspakets gelesen wird. Das MySQL-Client-Server-Protokoll kapselt alle seine Befehle in Paketen. Die Pakete bestehen aus einem kleinen Kopf und einem Textkörper mit dem eigentlichen Inhalt. Die Größe des Körpers ist im Kopfteil kodiert. mysqlnd liest den Körper in Stücken von MIN(header.size, mysqlnd.net_read_buffer_size) Bytes. Wenn ein Paketkörper größer als mysqlnd.net_read_buffer_size Bytes ist, muss mysqlnd den Befehl read() mehrfach aufrufen.

Der Wert kann auch mittels mysqli_options(link, MYSQLI_OPT_NET_READ_BUFFER_SIZE, size) gesetzt werden.

mysqlnd.sha256_server_public_key string

Diese Option bezieht sich auf das SHA-256-Authentifizierungs-Plugin und enthält den Pfad zur Datei mit dem öffentlichen RSA-Schlüssel des MySQL-Servers.

Der Client kann entweder auf die Angabe eines öffentlichen RSA-Schlüssels verzichten, den Schlüssel über diese PHP-Konfigurationseinstellung angeben oder zur Laufzeit mittels mysqli_options(). Wird vom Client kein öffentlicher RSA-Schlüssel angegeben, wird der Schlüssel im Rahmen des Standard-Authentifizierungsverfahrens des SHA-256-Authentifizierungs-Plugins ausgetauscht.

mysqlnd.trace_alloc string

mysqlnd.fetch_data_copy int

Erzwingt das Kopieren von Ergebnismengen aus den internen Ergebnismengenpuffern in PHP-Variablen, anstatt die standardmäßige Referenz- und Copy-on-Write-Logik zu verwenden. Weitere Details sind in den Hinweisen zur Implementierung der Speicherverwaltung zu finden.

Wenn Ergebnismengen kopiert werden, anstatt sie von PHP-Variablen referenzieren zu lassen, kann der für die PHP-Variablen belegte Speicher früher freigegeben werden. Je nach API-Code des Benutzers, den tatsächlichen Datenbankabfragen und der Größe ihrer Ergebnismengen kann dies den Speicherbedarf von mysqlnd verringern.

Dies darf nicht gesetzt werden, wenn PDO_MySQL verwendet wird. PDO_MySQL unterstützt diesen neuen Abrufmodus noch nicht.

Hinweis: Diese Einstellung wurde in PHP 8.1.0 entfernt.

add a note

User Contributed Notes

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