Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
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 |
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. Unter Microsoft Windows kann dieses Feature genutzt werden, wenn ein Debug-Build von PHP verwendet wird und PHP mit Microsoft Visual C Version 9 oder höher erstellt wurde.
mysqlnd.log_mask
intLegt 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
intDie voreingestellte Größe des mysqlnd-Speicherbereichs, der von den Ergebnismengen verwendet wird.
mysqlnd.net_read_timeout
intmysqlnd
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
intmysqlnd
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
stringDiese 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
stringmysqlnd.fetch_data_copy
intErzwingt 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.