# 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:

- mysqli_get_client_stats()
- mysqli_get_connection_stats()

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

  - mysqli_query()
  - mysqli_store_result()
`rows_buffered_from_client_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.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open