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.
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.