Der MySQL Native Driver bietet die Möglichkeit, Statistiken über die Kommunikation zwischen Client und Server zu sammeln. Es gibt zwei Arten von Statistiken:
Client-Statistiken
Verbindungsstatistiken
Wenn die Erweiterung mysqli verwendet wird, können diese Statistiken über zwei API-Aufrufe abgerufen werden:
Hinweis:
Die Statistiken werden für alle Erweiterungen zusammengefasst, die den MySQL Native Driver verwenden. Wenn zum Beispiel sowohl die Erweiterung mysqli als auch der PDO-MySQL-Treiber so konfiguriert sind, dass sie MySQLnd verwenden, dann wirken sich die Funktionsaufrufe von mysqli und die Methodenaufrufe von PDO auf die Statistik aus.
Es gibt keine Möglichkeit, herauszufinden, wie sehr ein bestimmter API-Aufruf einer Erweiterung, die gegen den MySQL Native Driver kompiliert wurde, eine bestimmte Statistik beeinflusst hat.
Auf die Client-Statistiken kann mit der Funktion mysqli_get_client_stats() zugegriffen werden.
Auf die Verbindungstatistiken kann mit der Funktion mysqli_get_connection_stats() zugegriffen werden.
Beide Funktionen geben ein assoziatives Array zurück, wobei der Name einer Statistik der Schlüssel für die zugehörigen statistischen Daten ist.
Die meisten Statistiken beziehen sich auf eine Verbindung, aber manche beziehen sich auf den Prozess; in diesem Fall wird darauf hingewiesen.
Die folgenden Statistiken werden vom MySQL Native Driver erstellt:
bytes_sentDie Anzahl der von PHP an den MySQL-Server gesendeten Bytes.
bytes_receivedDie Anzahl der vom MySQL-Server empfangenen Bytes.
packets_sentDie Anzahl der vom MySQL-Client-Server-Protokoll gesendeten Pakete.
packets_receivedDie Anzahl der vom MySQL-Client-Server-Protokoll empfangenen Pakete.
protocol_overhead_in
Der Overhead des MySQL-Client-Server-Protokolls für eingehenden
Datenverkehr in Bytes. Derzeit wird nur der Paket-Header (4 Bytes) als
Overhead betrachtet.
protocol_overhead_in = packets_received * 4
protocol_overhead_out
Der Overhead des MySQL-Client-Server-Protokolls für ausgehenden
Datenverkehr in Bytes. Derzeit wird nur der Paket-Header (4 Bytes) als
Overhead betrachtet.
protocol_overhead_out = packets_received * 4
bytes_received_ok_packetDie Gesamtgröße der mit dem MySQL-Client-Server-Protokoll empfangenen OK-Pakete in Bytes. Die OK-Pakete können eine Statusmeldung enthalten, deren Länge variieren kann, weshalb die Größe eines OK-Pakets nicht festgelegt ist.
Hinweis:
Die Gesamtgröße in Bytes enthält die Größe des Header-Pakets (4 Bytes, siehe Protokoll-Overhead).
packets_received_okDie Anzahl der mit dem MySQL-Client-Server-Protokoll empfangenen OK-Pakete.
bytes_received_eof_packetDie Gesamtgröße der mit dem MySQL-Client-Server-Protokoll empfangenen EOF-Pakete in Bytes. Die Größe von EOF kann je nach Serverversion variieren. Außerdem kann EOF eine Fehlermeldung enthalten.
Hinweis:
Die Gesamtgröße in Bytes enthält die Größe des Header-Pakets (4 Bytes, siehe Protokoll-Overhead).
packets_received_eofDie Anzahl der mit dem MySQL-Client-Server-Protokoll empfangenen EOF-Pakete.
Wie bei anderen Paketstatistiken erhöht sich die Anzahl der Pakete auch dann, wenn PHP nicht das erwartete Paket, sondern z. B. eine Fehlermeldung empfängt.
bytes_received_rset_header_packet
Die Gesamtgröße der mit dem MySQL-Client-Server-Protokoll empfangenen
Header-Pakete der Ergebnismenge in Bytes.
Die Größe der Pakete variiert in Abhängigkeit von der Nutzlast
(LOAD LOCAL INFILE, INSERT,
UPDATE, SELECT, Fehlermeldung).
Hinweis:
Die Gesamtgröße in Bytes enthält die Größe des Header-Pakets (4 Bytes, siehe Protokoll-Overhead).
packets_received_rset_headerDie Anzahl der mit dem MySQL-Client-Server-Protokoll empfangenen Header-Pakete der Ergebnismenge.
bytes_received_rset_field_meta_packetDie Gesamtgröße der mit dem MySQL-Client-Server-Protokoll empfangenen Metadaten-Pakete (Spalteninformationen) der Ergebnismenge in Bytes. Die Größe hängt natürlich von den Feldern in der Ergebnismenge ab. Im Fall von COM_LIST_FIELDS kann das Paket auch eine Fehlermeldung oder ein EOF-Paket enthalten.
Hinweis:
Die Gesamtgröße in Bytes enthält die Größe des Header-Pakets (4 Bytes, siehe Protokoll-Overhead).
packets_received_rset_field_metaDie Anzahl der mit dem MySQL-Client-Server-Protokoll empfangenen Metadaten-Pakete (Spalteninformationen) der Ergebnismenge.
bytes_received_rset_row_packet
Die Gesamtgröße der mit dem MySQL-Client-Server-Protokoll empfangenen
Pakete mit den Zeilendaten der Ergebnismenge in Bytes.
Das Paket kann auch eine Fehlermeldung oder ein EOF-Paket enthalten. Die
Anzahl der Fehlermeldungen und EOF-Pakete können ermittelt werden, indem
rows_fetched_from_server_normal und
rows_fetched_from_server_ps von
bytes_received_rset_row_packet abgezogen werden.
Hinweis:
Die Gesamtgröße in Bytes enthält die Größe des Header-Pakets (4 Bytes, siehe Protokoll-Overhead).
packets_received_rset_rowDie Anzahl der mit dem MySQL-Client-Server-Protokoll empfangenen Pakete mit den Zeilendaten der Ergebnismenge.
bytes_received_prepare_response_packetDie Gesamtgröße der Pakete für die Initialisierung vorbereiteter Anweisungen (prepared statement init packets), die vom MySQL-Client-Server-Protokoll als OK zurückgegeben werden, in Bytes. Diese Pakete können auch Fehlermeldungen enthalten. Die Größe der Pakete hängt von der MySQL-Version ab.
Hinweis:
Die Gesamtgröße in Bytes enthält die Größe des Header-Pakets (4 Bytes, siehe Protokoll-Overhead).
packets_received_prepare_responseDie Anzahl der Pakete für die Initialisierung vorbereiteter Anweisungen (prepared statement init packets), die vom MySQL-Client-Server-Protokoll als OK zurückgegeben werden.
bytes_received_change_user_packetDie Gesamtgröße der mit dem MySQL-Client-Server-Protokoll empfangenen COM_CHANGE_USER-Pakete in Bytes. Ein Paket kann auch eine Fehlermeldung oder ein EOF enthalten.
Hinweis:
Die Gesamtgröße in Bytes enthält die Größe des Header-Pakets (4 Bytes, siehe Protokoll-Overhead).
packets_received_change_userDie Anzahl der mit dem MySQL-Client-Server-Protokoll empfangenen COM_CHANGE_USER-Pakete.
packets_sent_commandDie Anzahl der Befehle des MySQL-Client-Server-Protokolls, die von PHP an MySQL gesendet wurden.
Es gibt keine Möglichkeit herauszufinden, welche spezifischen Befehle gesendet wurden und wie viele davon.
bytes_received_real_data_normal
Die Anzahl der Bytes an Nutzdaten, die der PHP-Client über das
Textprotokoll von mysqlnd abgerufen hat.
Dies ist die Größe der tatsächlichen Daten, die in den Ergebnismengen enthalten sind, die vom PHP-Client abgerufen wurden und nicht aus vorbereiteten Anweisungen stammen.
Zu beachten ist, dass, obwohl eine vollständige Ergebnismenge von
mysqlnd aus MySQL abgerufen wurde, diese Statistik
nur die tatsächlichen Daten zählt, die vom PHP-Client aus
mysqlnd abgerufen wurden.
Das folgende Beispiel zeigt eine Codesequenz, die den Wert erhöht:
$mysqli = new mysqli();
$res = $mysqli->query("SELECT 'abc'");
$res->fetch_assoc();
$res->close();
Die Statistik wird jedoch nicht erhöht, wenn die Ergebnismenge auf dem Client nur gepuffert, aber nicht abgerufen wird, wie im folgenden Beispiel:
$mysqli = new mysqli();
$res = $mysqli->query("SELECT 'abc'");
$res->close();
bytes_received_real_data_ps
Die Anzahl der Bytes an Nutzdaten, die der PHP-Client über das Protokoll
für vorbereitete Anweisungen von mysqlnd abgerufen hat.
Dies ist die Größe der tatsächlichen Daten, die in den Ergebnismengen enthalten sind, die vom PHP-Client abgerufen wurden und aus vorbereiteten Anweisungen stammen.
Der Wert erhöht sich nur dann, wenn die Ergebnismenge anschließend vom PHP-Client gelesen wird.
Zu beachten ist, dass, obwohl eine vollständige Ergebnismenge von
mysqlnd aus MySQL abgerufen wurde, diese Statistik
nur die tatsächlichen Daten zählt, die vom PHP-Client aus
mysqlnd abgerufen wurden.
Siehe auch bytes_received_real_data_normal.
result_set_queries
Die Anzahl der Abfragen, die eine Ergebnismenge erzeugt haben.
Beispiele für Abfragen, die eine Ergebnismenge erzeugen:
SELECT, SHOW.
Die Statistik wird nicht erhöht, wenn beim Lesen des Header-Pakets einer Zeile der Ergebnismenge ein Fehler aufgetreten ist.
Hinweis:
Diese Statistik kann als indirektes Maß für die Anzahl der von PHP an MySQL gesendeten Anfragen verwendet werden. Dies kann helfen, einen Client zu identifizieren, der eine hohe Datenbanklast verursacht.
non_result_set_queries
Die Anzahl der Abfragen, die keine Ergebnismenge erzeugt haben.
Beispiele für Abfragen, die keine Ergebnismenge erzeugen:
INSERT, UPDATE, LOAD DATA.
Die Statistik wird nicht erhöht, wenn beim Lesen des Header-Pakets einer Zeile der Ergebnismenge ein Fehler aufgetreten ist.
Hinweis:
Diese Statistik kann als indirektes Maß für die Anzahl der von PHP an MySQL gesendeten Anfragen verwendet werden. Dies kann helfen, einen Client zu identifizieren, der eine hohe Datenbanklast verursacht.
no_index_used
Die Anzahl der Abfragen, die eine Ergebnismenge erzeugt, aber keinen
Index verwendet haben (siehe auch die mysqld-Startoption
--log-queries-not-using-indexes).
Hinweis:
Solche Anfragen können als Exception gemeldet werden, indem
mysqli_report(MYSQLI_REPORT_INDEX);aufgerufen wird. Es ist möglich, sie stattdessen als Warnung zu melden, indemmysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT);aufgerufen wird.
bad_index_used
Die Anzahl der Abfragen, die eine Ergebnismenge erzeugt, aber keinen
guten Index verwendet haben (siehe auch die mysqld-Startoption
--log-slow-queries).
Hinweis:
Solche Anfragen können als Exception gemeldet werden, indem
mysqli_report(MYSQLI_REPORT_INDEX);aufgerufen wird. Es ist möglich, sie stattdessen als Warnung zu melden, indemmysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT);aufgerufen wird.
slow_queries
SQL-Anweisungen, deren Ausführung länger als
long_query_time Sekunden dauerte und bei denen
mindestens min_examined_row_limit Zeilen untersucht
werden mussten.
Wird von mysqli_report() nicht gemeldet.
buffered_setsDie Anzahl der gepufferten Ergebnismengen, die von normalen Abfragen (d. h. nicht über eine vorbereitete Anweisung) zurückgegeben wurden.
Beispiele für API-Aufrufe, die Ergebnismengen auf dem Client puffern: mysqli_query(), mysqli_store_result(), mysqli_stmt_get_result()
unbuffered_setsDie Anzahl der ungepufferten Ergebnismengen, die von normalen Abfragen (d. h. nicht über eine vorbereitete Anweisung) zurückgegeben wurden.
Ein Beispiel für API-Aufrufe, die keine Ergebnismengen auf dem Client puffern: mysqli_use_result()
ps_buffered_setsDie Anzahl der gepufferten Ergebnismengen, die von vorbereiteten Anweisungen zurückgegeben wurden.
Ein Beispiel für API-Aufrufe, die Ergebnismengen auf dem Client puffern: mysqli_stmt_store_result()
ps_unbuffered_setsDie Anzahl der ungepufferten Ergebnismengen, die von vorbereiteten Anweisungen zurückgegeben wurden.
In der Standardeinstellung werden vorbereitete Anweisungen nicht gepuffert, sodass die meisten vorbereiteten Anweisungen in dieser Statistik enthalten sind.
flushed_normal_setsDie Anzahl der Ergebnismengen, die von normalen Abfragen (d. h. nicht über eine vorbereitete Anweisung) zurückgegeben wurden, mit ungelesenen Daten, die stillschweigend geleert wurden..
Hinweis:
Die Bereinigung (Flushing) erfolgt nur bei ungepufferten Ergebnismengen.
Ungepufferte Ergebnismengen müssen vollständig abgerufen werden, bevor eine neue Abfrage über die Verbindung ausgeführt werden kann, sonst gibt MySQL einen Fehler aus. Wenn eine Anwendung nicht alle Zeilen aus einer ungepufferten Ergebnismenge abruft, ruft mysqlnd die Ergebnismenge implizit ab, um die Verbindung freizugeben.
Siehe auch
rows_skipped_normal,rows_skipped_ps.Ein paar mögliche Ursachen für einen impliziten Flush:
Eine fehlerhafte Client-Anwendung
Der Client hat aufgehört, Zeilen abzurufen, weil er gefunden hat, wonach er gesucht hat, aber die Ergebnismenge wurde noch nicht vollständig abgerufen
Die Client-Anwendung wurde unerwartet beendet
flushed_ps_setsDie Anzahl der Ergebnismengen vorbereiteter Anweisungen mit ungelesenen Daten, die stillschweigend geleert wurden.
Hinweis:
Die Bereinigung (Flushing) erfolgt nur bei ungepufferten Ergebnismengen.
Ungepufferte Ergebnismengen müssen vollständig abgerufen werden, bevor eine neue Abfrage über die Verbindung ausgeführt werden kann, sonst gibt MySQL einen Fehler aus. Wenn eine Anwendung nicht alle Zeilen aus einer ungepufferten Ergebnismenge abruft, ruft mysqlnd die Ergebnismenge implizit ab, um die Verbindung freizugeben.
Siehe auch
rows_skipped_normal,rows_skipped_ps.Ein paar mögliche Ursachen für einen impliziten Flush:
Eine fehlerhafte Client-Anwendung
Der Client hat aufgehört, Zeilen abzurufen, weil er gefunden hat, wonach er gesucht hat, aber die Ergebnismenge wurde noch nicht vollständig abgerufen
Die Client-Anwendung wurde unerwartet beendet
ps_prepared_never_executedDie Anzahl der vorbereiteten, aber nie ausgeführten Anweisungen.
ps_prepared_once_executedDie Anzahl der vorbereiteten Anweisungen, die nur einmal ausgeführt wurden.
rows_fetched_from_server_normalrows_fetched_from_server_psDie Anzahl der Zeilen der Ergebnismenge, die vom Server abgerufen wurden. Dazu gehören auch die Zeilen, die nicht vom Client gelesen wurden, sondern implizit aus geleerten ungepufferten Ergebnismengen abgerufen wurden.
Siehe auch packets_received_rset_row.
rows_buffered_from_client_normalDie Anzahl der gepufferten Zeilen, die von einer normalen Abfrage stammen.
Dies ist die Anzahl der Zeilen, die von MySQL abgerufen und auf dem Client gepuffert wurden.
Beispiele für Abfragen, die Ergebnisse puffern:
rows_buffered_from_client_ps
Wie rows_buffered_from_client_normal, aber für
vorbereitete Anweisungen.
rows_fetched_from_client_normal_bufferedDie Anzahl der Zeilen, die der Client aus einer gepufferten Ergebnismenge abgerufen hat, die durch eine normale Abfrage erstellt wurde.
rows_fetched_from_client_ps_bufferedDie Anzahl der Zeilen, die der Client aus einer gepufferten Ergebnismenge abgerufen hat, die durch eine vorbereitete Anweisung erstellt wurde.
rows_fetched_from_client_normal_unbufferedDie Anzahl der Zeilen, die der Client aus einer ungepufferten Ergebnismenge abgerufen hat, die durch eine normale Abfrage erstellt wurde.
rows_fetched_from_client_ps_unbufferedDie Anzahl der Zeilen, die der Client aus einer ungepufferten Ergebnismenge abgerufen hat, die durch eine vorbereitete Anweisung erstellt wurde.
rows_fetched_from_client_ps_cursorDie Anzahl der Zeilen, die der Client von einem durch eine vorbereitete Anweisung erstellten Zeiger (Cursor) abgerufen hat.
rows_skipped_normalrows_skipped_psFür zukünftige Verwendung reserviert (wird derzeit nicht unterstützt).
copy_on_write_savedcopy_on_write_performedDiese Statistik bezieht sich auf die Prozessebene.
Bei mysqlnd zeigen die von den Erweiterungen zurückgegebenen Variablen auf die internen Netzwerk-Ergebnispuffer von mysqlnd. Wenn die Daten nicht verändert werden, werden die abgerufenen Daten nur einmal im Speicher gehalten. Werden die Daten jedoch verändert, muss mysqlnd ein Copy-on-Write (Kopieren beim Schreiben) durchführen.
explicit_free_resultimplicit_free_resultDiese Statistik bezieht sich auf die Verbindungs- und die Prozessebene.
Die Anzahl der freigegebenen Ergebnismengen.
proto_text_fetched_null
Die Anzahl der Spalten des Typs
MYSQL_TYPE_NULL,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_null
Die Anzahl der Spalten des Typs
MYSQL_TYPE_NULL, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_bit
Die Anzahl der Spalten des Typs
MYSQL_TYPE_BIT,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_bit
Die Anzahl der Spalten des Typs
MYSQL_TYPE_BIT, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_tinyint
Die Anzahl der Spalten des Typs
MYSQL_TYPE_TINY,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_tinyint
Die Anzahl der Spalten des Typs
MYSQL_TYPE_TINY, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_short
Die Anzahl der Spalten des Typs
MYSQL_TYPE_SHORT,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_short
Die Anzahl der Spalten des Typs
MYSQL_TYPE_SHORT, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_int24
Die Anzahl der Spalten des Typs
MYSQL_TYPE_INT24,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_int24
Die Anzahl der Spalten des Typs
MYSQL_TYPE_INT24, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_int
Die Anzahl der Spalten des Typs
MYSQL_TYPE_LONG,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_int
Die Anzahl der Spalten des Typs
MYSQL_TYPE_LONG, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_bigint
Die Anzahl der Spalten des Typs
MYSQL_TYPE_LONGLONG,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_bigint
Die Anzahl der Spalten des Typs
MYSQL_TYPE_LONGLONG, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_decimal
Die Anzahl der Spalten des Typs
MYSQL_TYPE_DECIMAL oder MYSQL_TYPE_NEWDECIMAL,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_decimal
Die Anzahl der Spalten des Typs
MYSQL_TYPE_DECIMAL oder MYSQL_TYPE_NEWDECIMAL,
die aus einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_float
Die Anzahl der Spalten des Typs
MYSQL_TYPE_FLOAT,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_float
Die Anzahl der Spalten des Typs
MYSQL_TYPE_FLOAT, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_double
Die Anzahl der Spalten des Typs
MYSQL_TYPE_DOUBLE,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_double
Die Anzahl der Spalten des Typs
MYSQL_TYPE_DOUBLE, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_date
Die Anzahl der Spalten des Typs
MYSQL_TYPE_DATE oder MYSQL_TYPE_NEWDATE,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_date
Die Anzahl der Spalten des Typs
MYSQL_TYPE_DATE oder MYSQL_TYPE_NEWDATE,
die aus einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_year
Die Anzahl der Spalten des Typs
MYSQL_TYPE_YEAR,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_year
Die Anzahl der Spalten des Typs
MYSQL_TYPE_YEAR, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_time
Die Anzahl der Spalten des Typs
MYSQL_TYPE_TIME,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_time
Die Anzahl der Spalten des Typs
MYSQL_TYPE_TIME, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_datetime
Die Anzahl der Spalten des Typs
MYSQL_TYPE_DATETIME,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_datetime
Die Anzahl der Spalten des Typs
MYSQL_TYPE_DATETIME, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_timestamp
Die Anzahl der Spalten des Typs
MYSQL_TYPE_TIMESTAMP,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_timestamp
Die Anzahl der Spalten des Typs
MYSQL_TYPE_TIMESTAMP, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_string
Die Anzahl der Spalten des Typs
MYSQL_TYPE_STRING, MYSQL_TYPE_VARSTRING oder MYSQL_TYPE_VARCHAR
fetched from a normal query (MySQL text protocol).
proto_binary_fetched_string
Die Anzahl der Spalten des Typs
MYSQL_TYPE_STRING, MYSQL_TYPE_VARSTRING oder MYSQL_TYPE_VARCHAR
fetched from a prepared statement (MySQL binary protocol).
proto_text_fetched_blob
Die Anzahl der Spalten des Typs
MYSQL_TYPE_TINY_BLOB,
MYSQL_TYPE_MEDIUM_BLOB,
MYSQL_TYPE_LONG_BLOB oder
MYSQL_TYPE_BLOB,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_blob
Die Anzahl der Spalten des Typs
MYSQL_TYPE_TINY_BLOB,
MYSQL_TYPE_MEDIUM_BLOB,
MYSQL_TYPE_LONG_BLOB oder
MYSQL_TYPE_BLOB die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_enum
Die Anzahl der Spalten des Typs
MYSQL_TYPE_ENUM,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_enum
Die Anzahl der Spalten des Typs
MYSQL_TYPE_ENUM, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_set
Die Anzahl der Spalten des Typs
MYSQL_TYPE_SET,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_set
Die Anzahl der Spalten des Typs
MYSQL_TYPE_SET, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_geometry
Die Anzahl der Spalten des Typs
MYSQL_TYPE_GEOMETRY,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
proto_binary_fetched_geometry
Die Anzahl der Spalten des Typs
MYSQL_TYPE_GEOMETRY, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
proto_text_fetched_other
Die Anzahl der Spalten eines zuvor nicht aufgelisteten Typs
MYSQL_TYPE_*,
die aus einer normalen Abfrage abgerufen wurden (MySQL-Textprotokoll).
Hinweis:
Theoretisch sollte dies immer
0sein.
proto_binary_fetched_other
Die Anzahl der Spalten eines zuvor nicht aufgelisteten Typs
MYSQL_TYPE_*, die aus
einer vorbereiteten Anweisung abgerufen wurden (MySQL-Binärprotokoll).
Hinweis:
Theoretisch sollte dies immer
0sein.
connect_successDie Anzahl der erfolgreichen Verbindungsversuche.
Hinweis:
connect_successenthält die Summe der erfolgreichen Versuche, persistente und nicht-persistente Verbindungen herzustellen. Die Anzahl der erfolgreichen Versuche, eine nicht-persistente Verbindung herzustellen, ist alsoconnect_success - pconnect_success.
pconnect_successDie Anzahl der erfolgreichen Versuche, eine persistente (dauerhafte) Verbindung herzustellen.
connect_failureDie Anzahl der fehlgeschlagenen Verbindungsversuche.
reconnectDiese Statistik bezieht sich auf die Prozessebene.
active_connectionsDiese Statistik bezieht sich auf die Prozessebene.
Die Anzahl der aktiven Verbindungen (persistent und nicht-persistent).
Hinweis:
Die Anzahl der aktiven nicht-persistenten Verbindungen ist
active_connections - active_persistent_connections.
active_persistent_connectionsDiese Statistik bezieht sich auf die Prozessebene.
Die Anzahl der aktiven persistenten Verbindungen.
explicit_closeDie Anzahl der explizit geschlossenen Verbindungen.
Beispiel #1 Beispiele für Codeschnipsel, die zu einem expliziten Schließen führen
$link = new mysqli(/* ... */); $link->close(/* ... */);
$link = new mysqli(/* ... */); $link->connect(/* ... */);
implicit_closeDie Anzahl der implizit geschlossenen Verbindungen.
Beispiel #2 Beispiele für Codeschnipsel, die zu einem impliziten Schließen führen
$link = new mysqli(/* ... */); $link->real_connect(/* ... */);
unset($link)
Persistente Verbindung: eine gepoolte Verbindung wurde mit real_connect erstellt und es können unbekannte Optionen gesetzt sein - implizites Schließen, um die Rückgabe einer Verbindung mit unbekannten Optionen zu vermeiden
Persistente Verbindung: ping/change_user schlägt fehl und ext/mysqli schließt die Verbindung
Am Ende der Skriptausführung: Schließen der Verbindungen, die noch nicht vom Benutzer geschlossen wurden
disconnect_close
Die Anzahl der fehlgeschlagenen Verbindungen, die der C-API-Aufruf
mysql_real_connect beim Versuch, eine Verbindung
aufzubauen, meldet.
in_middle_of_command_closeDiese Statistik bezieht sich auf die Prozessebene.
Eine Verbindung wurde mitten in der Ausführung eines Befehls geschlossen (noch nicht abgerufene Ergebnismengen, nachdem eine Abfrage gesendet und bevor eine Antwort abgerufen wurde, während Daten abgerufen wurden, während Daten mit LOAD DATA übertragen wurden).
Sofern keine asynchronen Abfragen verwendet werden, sollte dies nur passieren, wenn ein Skript unerwartet gestoppt wird und PHP die Verbindungen automatisch schließt.
init_command_executed_count
Die Anzahl der ausgeführten init-Befehle,
zum Beispiel mysqli_options(MYSQLI_INIT_COMMAND , $value).
Die Anzahl der erfolgreichen Ausführungen ist
init_command_executed_count - init_command_failed_count.
init_command_failed_countDie Anzahl der fehlgeschlagenen init-Befehle.
COM_*-Befehl
com_quitcom_init_dbcom_querycom_field_listcom_create_dbcom_drop_dbcom_refreshcom_shutdowncom_statisticscom_process_infocom_connectcom_process_killcom_debugcom_pingcom_timecom_delayed_insertcom_change_usercom_binlog_dumpcom_table_dumpcom_connect_outcom_register_slavecom_stmt_preparecom_stmt_executecom_stmt_send_long_datacom_stmt_closecom_stmt_resetcom_stmt_set_optioncom_stmt_fetchcom_daemon
Die Anzahl der Versuche, einen bestimmten
COM_*-Befehl von PHP an MySQL zu senden.
Die Statistik wird erhöht, nachdem die Zeile geprüft wurde und unmittelbar bevor das entsprechende MySQL-Client-Server-Protokoll-Paket gesendet wird.
Die Statistik wird nicht nach unten korrigiert, wenn MySQLnd das Paket
nicht über die Leitung senden kann. Im Falle eines Fehlers gibt MySQLnd
die PHP-Warnung Error while sending %s packet. PID=%d.
aus.
Beispiel #3 Beispiele für die Verwendung
Überprüfen, ob PHP bestimmte Befehle an MySQL sendet, zum Beispiel,
ob ein Client COM_PROCESS_KILL sendet
Berechnen der durchschnittlichen Anzahl der ausgeführten
vorbereiteten Anweisungen durch Vergleich von
COM_EXECUTE und COM_PREPARE
Überprüfen, ob PHP nicht-vorbereitete SQL-Anweisungen ausgeführt
hat, indem kontrolliert wird, ob COM_QUERY Null
ist
Erkennen von PHP-Skripten, die eine zu große Anzahl von
SQL-Anweisungen ausführen, indem COM_QUERY und
COM_EXECUTE überprüft werden
explicit_stmt_closeimplicit_stmt_closeDiese Statistik bezieht sich auf die Prozessebene.
Die Anzahl der abgeschlossenen vorbereiteten Anweisungen.
Hinweis:
Eine vorbereitete Anweisung wird immer explizit abgeschlossen. Sie wird nur dann implizit abgeschlossen, wenn ihre Vorbereitung fehlschlägt.
mem_emalloc_countmem_emalloc_ammountmem_ecalloc_countmem_ecalloc_ammountmem_realloc_countmem_realloc_ammountmem_efree_countmem_malloc_countmem_malloc_ammountmem_calloc_countmem_calloc_ammountmem_ealloc_countmem_ealloc_ammountmem_free_countDiese Statistik bezieht sich auf die Prozessebene.
Die Anzahl der Aufrufe bezüglich der Speicherverwaltung.
command_buffer_too_smallDie Anzahl der Erweiterungen des Netzwerk-Befehlspuffers, wenn PHP einen Befehl an MySQL sendet.
MySQLnd weist jeder Verbindung einen internen Befehls-/Netzwerkpuffer von mysqlnd.net_cmd_buffer_size Bytes zu.
Wenn ein Befehl des MySQL-Client-Server-Protokolls, z. B.
COM_QUERY (normale Abfrage), nicht in den Puffer
passt, vergrößert MySQLnd den Puffer auf die Größe, die zum Senden des
Befehls erforderlich ist. Jedes Mal, wenn der Puffer für eine Verbindung
vergrößert 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, sollte in Erwägung gezogen werden, die Standardgröße zu erhöhen, um Neuzuweisungen zu vermeiden.
connection_reusedDie Anzahl, wie oft eine persistente Verbindung insgesamt wiederverwendet wurde.