Statistiken

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.

Statistiken abrufen

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.

Statistiken vom MySQL Native Driver

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:

Netzwerkbezogene Statistiken
bytes_sent
Die Anzahl der von PHP an den MySQL-Server gesendeten Bytes.
bytes_received
Die Anzahl der vom MySQL-Server empfangenen Bytes.
packets_sent
Die Anzahl der vom MySQL-Client-Server-Protokoll gesendeten Pakete.
packets_received
Die 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_packet
Die 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_ok
Die Anzahl der mit dem MySQL-Client-Server-Protokoll empfangenen OK-Pakete.
bytes_received_eof_packet
Die 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_eof
Die 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_header
Die Anzahl der mit dem MySQL-Client-Server-Protokoll empfangenen Header-Pakete der Ergebnismenge.
bytes_received_rset_field_meta_packet
Die 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_meta
Die 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_row
Die Anzahl der mit dem MySQL-Client-Server-Protokoll empfangenen Pakete mit den Zeilendaten der Ergebnismenge.
bytes_received_prepare_response_packet
Die 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_response
Die 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_packet
Die 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_user
Die Anzahl der mit dem MySQL-Client-Server-Protokoll empfangenen COM_CHANGE_USER-Pakete.
packets_sent_command
Die 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();
Jeder Abrufvorgang erhöht den Wert.

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.
Statistiken zu Ergebnismengen
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, indem mysqli_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, indem mysqli_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.
Achtung

Wird von mysqli_report() nicht gemeldet.

buffered_sets
Die 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_sets
Die 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_sets
Die 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_sets
Die 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_sets
Die 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_sets
Die 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_executed
Die Anzahl der vorbereiteten, aber nie ausgeführten Anweisungen.
ps_prepared_once_executed
Die Anzahl der vorbereiteten Anweisungen, die nur einmal ausgeführt wurden.
rows_fetched_from_server_normal
rows_fetched_from_server_ps
Die 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_normal
Die 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_server_ps
Wie rows_buffered_from_client_normal, aber für vorbereitete Anweisungen.
rows_fetched_from_client_normal_buffered
Die Anzahl der Zeilen, die der Client aus einer gepufferten Ergebnismenge abgerufen hat, die durch eine normale Abfrage erstellt wurde.
rows_fetched_from_client_ps_buffered
Die Anzahl der Zeilen, die der Client aus einer gepufferten Ergebnismenge abgerufen hat, die durch eine vorbereitete Anweisung erstellt wurde.
rows_fetched_from_client_normal_unbuffered
Die Anzahl der Zeilen, die der Client aus einer ungepufferten Ergebnismenge abgerufen hat, die durch eine normale Abfrage erstellt wurde.
rows_fetched_from_client_ps_unbuffered
Die Anzahl der Zeilen, die der Client aus einer ungepufferten Ergebnismenge abgerufen hat, die durch eine vorbereitete Anweisung erstellt wurde.
rows_fetched_from_client_ps_cursor
Die Anzahl der Zeilen, die der Client von einem durch eine vorbereitete Anweisung erstellten Zeiger (Cursor) abgerufen hat.
rows_skipped_normal
rows_skipped_ps
Für zukünftige Verwendung reserviert (wird derzeit nicht unterstützt).
copy_on_write_saved
copy_on_write_performed
Diese 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_result
implicit_free_result
Diese 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 0 sein.

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

Verbindungsbezogene Statistiken
connect_success
Die Anzahl der erfolgreichen Verbindungsversuche.

Hinweis: connect_success enthält die Summe der erfolgreichen Versuche, persistente und nicht-persistente Verbindungen herzustellen. Die Anzahl der erfolgreichen Versuche, eine nicht-persistente Verbindung herzustellen, ist also connect_success - pconnect_success.

pconnect_success
Die Anzahl der erfolgreichen Versuche, eine persistente (dauerhafte) Verbindung herzustellen.
connect_failure
Die Anzahl der fehlgeschlagenen Verbindungsversuche.
reconnect
Diese Statistik bezieht sich auf die Prozessebene.
active_connections
Diese 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_connections
Diese Statistik bezieht sich auf die Prozessebene. Die Anzahl der aktiven persistenten Verbindungen.
explicit_close
Die 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_close
Die 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_close
Diese 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).
Warnung

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_count
Die Anzahl der fehlgeschlagenen init-Befehle.
Statistiken im Zusammenhang mit dem COM_*-Befehl
com_quit
com_init_db
com_query
com_field_list
com_create_db
com_drop_db
com_refresh
com_shutdown
com_statistics
com_process_info
com_connect
com_process_kill
com_debug
com_ping
com_time
com_delayed_insert
com_change_user
com_binlog_dump
com_table_dump
com_connect_out
com_register_slave
com_stmt_prepare
com_stmt_execute
com_stmt_send_long_data
com_stmt_close
com_stmt_reset
com_stmt_set_option
com_stmt_fetch
com_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.
Achtung

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

Sonstige Statistiken
explicit_stmt_close
implicit_stmt_close
Diese 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_count
mem_emalloc_ammount
mem_ecalloc_count
mem_ecalloc_ammount
mem_realloc_count
mem_realloc_ammount
mem_efree_count
mem_malloc_count
mem_malloc_ammount
mem_calloc_count
mem_calloc_ammount
mem_ealloc_count
mem_ealloc_ammount
mem_free_count
Diese Statistik bezieht sich auf die Prozessebene. Die Anzahl der Aufrufe bezüglich der Speicherverwaltung.
command_buffer_too_small
Die 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_reused
Die Anzahl, wie oft eine persistente Verbindung insgesamt wiederverwendet wurde.
add a note

User Contributed Notes

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