# 統計情報

MySQL Native Driver は、クライアントとサーバー間の通信に関する 統計情報の収集をサポートしています。 収集される統計情報は、主に以下の 2 種類です。

- クライアント統計情報
- 接続統計情報

mysqli 拡張モジュールを使用している場合、 これらの統計情報は以下の 2 つの API 呼び出しで取得できます。

- mysqli_get_client_stats()
- mysqli_get_connection_stats()

> 注意: 統計情報は、MySQL Native Driver を使用するすべての拡張モジュール間で 集約されます。 たとえば、mysqli 拡張モジュールと PDO MySQL ドライバの両方が MySQLnd を使用するように 設定されている場合、mysqli の関数呼び出しと PDO のメソッド呼び出しの両方が統計情報に影響します。 MySQL Native Driver を利用する各拡張モジュールの API 呼び出しが、個々の統計情報にどの程度影響しているかを特定することはできません。

## 統計情報の取得

クライアント統計情報は、 mysqli_get_client_stats() 関数を呼び出すことで取得できます。

接続統計情報は、 mysqli_get_connection_stats() 関数を呼び出すことで取得できます。

どちらの関数も連想配列を返します。 統計項目の名前が、対応する統計データのキーになっています。

## MySQL Native Driver の統計情報

ほとんどの統計情報は接続に関連付けられますが、 一部はプロセスに関連付けられます。その場合はその旨が記載されます。

MySQL Native Driver が生成する統計情報を以下に示します。

ネットワーク関連の統計情報
`bytes_sent`
  PHP から MySQL サーバーに送信されたバイト数。
`bytes_received`
  MySQL サーバーから受信したバイト数。
`packets_sent`
  MySQL クライアントサーバープロトコルで送信されたパケット数。
`packets_received`
  MySQL クライアントサーバープロトコルで受信したパケット数。
`protocol_overhead_in`
  MySQL クライアントサーバープロトコルの受信トラフィックにおけるオーバーヘッド（バイト単位）。 現在はパケットヘッダ（4 バイト）のみがオーバーヘッドとみなされます。 `protocol_overhead_in = packets_received * 4`
`protocol_overhead_out`
  MySQL クライアントサーバープロトコルの送信トラフィックにおけるオーバーヘッド（バイト単位）。 現在はパケットヘッダ（4 バイト）のみがオーバーヘッドとみなされます。 `protocol_overhead_out = packets_received * 4`
`bytes_received_ok_packet`
  受信した MySQL クライアントサーバープロトコルの OK パケットの合計サイズ（バイト単位）。 OK パケットにはステータスメッセージを含めることができます。 ステータスメッセージの長さは可変であるため、OK パケットのサイズは固定ではありません。

  > 注意: 合計サイズ（バイト単位）にはヘッダパケットのサイズ （4 バイト。プロトコルオーバーヘッドを参照）が含まれます。

`packets_received_ok`
  受信した MySQL クライアントサーバープロトコルの OK パケットの数。
`bytes_received_eof_packet`
  受信した MySQL クライアントサーバープロトコルの EOF パケットの合計サイズ（バイト単位）。 EOF のサイズはサーバーのバージョンによって異なる場合があります。 また、EOF はエラーメッセージを転送することもあります。

  > 注意: 合計サイズ（バイト単位）にはヘッダパケットのサイズ （4 バイト。プロトコルオーバーヘッドを参照）が含まれます。

`packets_received_eof`
  MySQL クライアントサーバープロトコルの EOF パケットの数。 他のパケット統計情報と同様に、PHP が期待するパケットではなく たとえばエラーメッセージを受信した場合でもパケット数は増加します。
`bytes_received_rset_header_packet`
  受信した MySQL クライアントサーバープロトコルの結果セットのヘッダパケット 合計サイズ（バイト単位）。 パケットのサイズはペイロード （`LOAD LOCAL INFILE`、`INSERT`、 `UPDATE`、`SELECT`、エラーメッセージ）によって異なります。

  > 注意: 合計サイズ（バイト単位）にはヘッダパケットのサイズ （4 バイト。プロトコルオーバーヘッドを参照）が含まれます。

`packets_received_rset_header`
  MySQL クライアントサーバープロトコルの結果セットのヘッダパケット数。
`bytes_received_rset_field_meta_packet`
  受信した MySQL クライアントサーバープロトコルの結果セットのメタデータ （フィールド情報）パケット合計サイズ（バイト単位）。 当然、サイズは結果セット内のフィールドによって異なります。 COM_LIST_FIELDS の場合、パケットにはエラーまたは EOF パケットが 含まれることもあります。

  > 注意: 合計サイズ（バイト単位）にはヘッダパケットのサイズ （4 バイト。プロトコルオーバーヘッドを参照）が含まれます。

`packets_received_rset_field_meta`
  MySQL クライアントサーバープロトコルの結果セットのメタデータ （フィールド情報）パケット数。
`bytes_received_rset_row_packet`
  受信した MySQL クライアントサーバープロトコルの結果セットの行データパケット 合計サイズ（バイト単位）。 パケットにはエラーまたは EOF パケットが含まれることもあります。 `rows_fetched_from_server_normal` と `rows_fetched_from_server_ps` を `bytes_received_rset_row_packet` から差し引くことで、エラーおよび EOF パケットの数を算出できます。

  > 注意: 合計サイズ（バイト単位）にはヘッダパケットのサイズ （4 バイト。プロトコルオーバーヘッドを参照）が含まれます。

`packets_received_rset_row`
  MySQL クライアントサーバープロトコルの結果セットの行データパケット数。
`bytes_received_prepare_response_packet`
  受信した MySQL クライアントサーバープロトコルのプリペアドステートメント初期化用 OK パケット（プリペアドステートメント初期化パケット）の合計サイズ（バイト単位）。 パケットにはエラーが含まれることもあります。 パケットのサイズは MySQL のバージョンによって異なります。

  > 注意: 合計サイズ（バイト単位）にはヘッダパケットのサイズ （4 バイト。プロトコルオーバーヘッドを参照）が含まれます。

`packets_received_prepare_response`
  MySQL クライアントサーバープロトコルのプリペアドステートメント初期化用 OK パケット（プリペアドステートメント初期化パケット）の数。
`bytes_received_change_user_packet`
  受信した MySQL クライアントサーバープロトコルの COM_CHANGE_USER パケットの 合計サイズ（バイト単位）。 パケットにはエラーまたは EOF が含まれることもあります。

  > 注意: 合計サイズ（バイト単位）にはヘッダパケットのサイズ （4 バイト。プロトコルオーバーヘッドを参照）が含まれます。

`packets_received_change_user`
  MySQL クライアントサーバープロトコルの COM_CHANGE_USER パケットの数。
`packets_sent_command`
  PHP から MySQL に送信された MySQL クライアントサーバープロトコルコマンドの数。 どの特定のコマンドがいくつ送信されたかを知る方法はありません。
`bytes_received_real_data_normal`
  PHP クライアントがテキストプロトコルを使用して `mysqlnd` から取得したペイロードのバイト数。 これは、プリペアドステートメントから生成されたものではなく、 PHP クライアントが取得した結果セットに含まれる実データのサイズです。 `mysqlnd` が MySQL からの結果セット全体を 取得済みであっても、この統計情報は PHP クライアントが `mysqlnd` から実際に取得したデータのみをカウントすることに 注意してください。

  値を増加させるコードの例を以下に示します。

      $mysqli = new mysqli();
      $res = $mysqli->query("SELECT 'abc'");
      $res->fetch_assoc();
      $res->close();

  フェッチ操作を行うたびに値が増加します。

  ただし、結果セットがクライアント側でバッファリングされただけで フェッチされなかった場合、以下の例のように統計情報は増加しません。

      $mysqli = new mysqli();
      $res = $mysqli->query("SELECT 'abc'");
      $res->close();

`bytes_received_real_data_ps`
  PHP クライアントがプリペアドステートメントプロトコルを使用して `mysqlnd` から取得したペイロードのバイト数。 これは、プリペアドステートメントから生成され、 PHP クライアントが取得した結果セットに含まれる実データのサイズです。 結果セットがその後 PHP クライアントによって読み取られなかった場合、値は増加しません。 `mysqlnd` が MySQL からの結果セット全体を 取得済みであっても、この統計情報は PHP クライアントが `mysqlnd` から実際に取得したデータのみをカウントすることに 注意してください。 `bytes_received_real_data_normal` も参照してください。

結果セット関連の統計情報
`result_set_queries`
  結果セットを生成したクエリの数。 結果セットを生成するクエリの例: `SELECT`、`SHOW`。 結果セットのヘッダパケットの読み取り時にエラーが発生した場合、 この統計情報は増加しません。

  > 注意: この統計情報は、PHP が MySQL に送信したクエリ数の 間接的な指標として使用できます。 これは、データベースに高い負荷をかけているクライアントの 特定に役立つ場合があります。

`non_result_set_queries`
  結果セットを生成しなかったクエリの数。 結果セットを生成しないクエリの例: `INSERT`、`UPDATE`、`LOAD DATA`。 結果セットのヘッダパケットの読み取り時にエラーが発生した場合、 この統計情報は増加しません。

  > 注意: この統計情報は、PHP が MySQL に送信したクエリ数の 間接的な指標として使用できます。 これは、データベースに高い負荷をかけているクライアントの 特定に役立つ場合があります。

`no_index_used`
  結果セットを生成したがインデックスを使用しなかったクエリの数。 （mysqld の起動オプション `--log-queries-not-using-indexes` も参照してください。）

  > 注意: これらのクエリは、 `mysqli_report(MYSQLI_REPORT_INDEX);` を呼び出すことで例外を通じて報告させることができます。 `mysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT);` を呼び出すことで、代わりに警告として報告させることもできます。

`bad_index_used`
  結果セットを生成したが適切なインデックスを使用しなかったクエリの数。 （mysqld の起動オプション `--log-slow-queries` も参照してください。）

  > 注意: これらのクエリは、 `mysqli_report(MYSQLI_REPORT_INDEX);` を呼び出すことで例外を通じて報告させることができます。 `mysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT);` を呼び出すことで、代わりに警告として報告させることもできます。

`slow_queries`
  実行に `long_query_time` 秒以上かかり、 少なくとも `min_examined_row_limit` 行の検査を 必要とした SQL 文。
  警告

  mysqli_report() を通じては報告されません。

`buffered_sets`
  通常のクエリ（つまり、プリペアドステートメント経由ではないクエリ）が返した バッファリングされた結果セットの数。

  クライアント側で結果セットをバッファリングする API 呼び出しの例: mysqli_query(), mysqli_store_result(), mysqli_stmt_get_result()

`unbuffered_sets`
  通常のクエリ（つまり、プリペアドステートメント経由ではないクエリ）が返した バッファリングされない結果セットの数。

  クライアント側で結果セットをバッファリングしない API 呼び出しの例: mysqli_use_result()

`ps_buffered_sets`
  プリペアドステートメントが返したバッファリングされた結果セットの数。

  クライアント側で結果セットをバッファリングする API 呼び出しの例: mysqli_stmt_store_result()

`ps_unbuffered_sets`
  プリペアドステートメントが返したバッファリングされない結果セットの数。 デフォルトではプリペアドステートメントはバッファリングされないため、 ほとんどのプリペアドステートメントはこの統計情報にカウントされます。
`flushed_normal_sets`
  通常のクエリ（つまり、プリペアドステートメント経由ではないクエリ）が返した 結果セットのうち、未読のデータが暗黙的にフラッシュされたものの数。

  > 注意: フラッシュはバッファリングされない結果セットでのみ発生します。 バッファリングされない結果セットは、接続上で新しいクエリを実行する前に 完全にフェッチする必要があります。そうしないと MySQL がエラーをスローします。 アプリケーションがバッファリングされない結果セットのすべての行をフェッチしなかった場合、 mysqlnd は暗黙的に結果セットをフェッチして回線をクリアします。 `rows_skipped_normal`、`rows_skipped_ps` も参照してください。

  > 暗黙的なフラッシュが発生する原因の例:

  > - クライアントアプリケーションの不具合
  > - クライアントが必要なデータを見つけた後に読み取りを中止したが、 MySQL に必要以上のレコードを計算させてしまった場合
  > - クライアントアプリケーションが予期せず停止した場合

`flushed_ps_sets`
  プリペアドステートメントが返した結果セットのうち、 未読のデータが暗黙的にフラッシュされたものの数。

  > 注意: フラッシュはバッファリングされない結果セットでのみ発生します。 バッファリングされない結果セットは、接続上で新しいクエリを実行する前に 完全にフェッチする必要があります。そうしないと MySQL がエラーをスローします。 アプリケーションがバッファリングされない結果セットのすべての行をフェッチしなかった場合、 mysqlnd は暗黙的に結果セットをフェッチして回線をクリアします。 `rows_skipped_normal`、`rows_skipped_ps` も参照してください。

  > 暗黙的なフラッシュが発生する原因の例:

  > - クライアントアプリケーションの不具合
  > - クライアントが必要なデータを見つけた後に読み取りを中止したが、 MySQL に必要以上のレコードを計算させてしまった場合
  > - クライアントアプリケーションが予期せず停止した場合

`ps_prepared_never_executed`
  準備されたが一度も実行されなかったステートメントの数。
`ps_prepared_once_executed`
  一度だけ実行されたプリペアドステートメントの数。
`rows_fetched_from_server_normal`
`rows_fetched_from_server_ps`
  サーバーからフェッチされた結果セット行の合計数。 これには、クライアントが読み取らなかったが、 バッファリングされない結果セットのフラッシュにより暗黙的にフェッチされた行も含まれます。 `packets_received_rset_row` も参照してください。
`rows_buffered_from_client_normal`
  通常のクエリから生成された、バッファリングされた行の合計数。 これは、MySQL からフェッチされ、クライアント側でバッファリングされた行の数です。

  結果をバッファリングするクエリの例:

  - mysqli_query()
  - mysqli_store_result()
`rows_buffered_from_client_ps`
  `rows_buffered_from_client_normal` と同様ですが、 プリペアドステートメント用です。
`rows_fetched_from_client_normal_buffered`
  通常のクエリで作成されたバッファリングされた結果セットから、 クライアントがフェッチした行の合計数。
`rows_fetched_from_client_ps_buffered`
  プリペアドステートメントで作成されたバッファリングされた結果セットから、 クライアントがフェッチした行の合計数。
`rows_fetched_from_client_normal_unbuffered`
  通常のクエリで作成されたバッファリングされない結果セットから、 クライアントがフェッチした行の合計数。
`rows_fetched_from_client_ps_unbuffered`
  プリペアドステートメントで作成されたバッファリングされない結果セットから、 クライアントがフェッチした行の合計数。
`rows_fetched_from_client_ps_cursor`
  プリペアドステートメントで作成されたカーソルから、 クライアントがフェッチした行の合計数。
`rows_skipped_normal`
`rows_skipped_ps`
  将来の使用のために予約されています（現在はサポートされていません）。
`copy_on_write_saved`
`copy_on_write_performed`
  これはプロセスレベルのスコープの統計情報です。 mysqlnd では、拡張モジュールが返す変数は mysqlnd の 内部ネットワーク結果バッファを指しています。 データが変更されない場合、フェッチされたデータはメモリ内に一度だけ保持されます。 ただし、データを変更する場合は、mysqlnd が コピーオンライト操作を実行します。
`explicit_free_result`
`implicit_free_result`
  これは接続レベルおよびプロセスレベルのスコープの統計情報です。 解放された結果セットの合計数。
`proto_text_fetched_null`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_NULL` 型のカラムの合計数。
`proto_binary_fetched_null`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_NULL` 型のカラムの合計数。
`proto_text_fetched_bit`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_BIT` 型のカラムの合計数。
`proto_binary_fetched_bit`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_BIT` 型のカラムの合計数。
`proto_text_fetched_tinyint`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_TINY` 型のカラムの合計数。
`proto_binary_fetched_tinyint`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_TINY` 型のカラムの合計数。
`proto_text_fetched_short`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_SHORT` 型のカラムの合計数。
`proto_binary_fetched_short`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_SHORT` 型のカラムの合計数。
`proto_text_fetched_int24`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_INT24` 型のカラムの合計数。
`proto_binary_fetched_int24`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_INT24` 型のカラムの合計数。
`proto_text_fetched_int`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_LONG` 型のカラムの合計数。
`proto_binary_fetched_int`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_LONG` 型のカラムの合計数。
`proto_text_fetched_bigint`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_LONGLONG` 型のカラムの合計数。
`proto_binary_fetched_bigint`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_LONGLONG` 型のカラムの合計数。
`proto_text_fetched_decimal`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_DECIMAL` または `MYSQL_TYPE_NEWDECIMAL` 型のカラムの合計数。
`proto_binary_fetched_decimal`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_DECIMAL` または `MYSQL_TYPE_NEWDECIMAL` 型のカラムの合計数。
`proto_text_fetched_float`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_FLOAT` 型のカラムの合計数。
`proto_binary_fetched_float`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_FLOAT` 型のカラムの合計数。
`proto_text_fetched_double`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_DOUBLE` 型のカラムの合計数。
`proto_binary_fetched_double`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_DOUBLE` 型のカラムの合計数。
`proto_text_fetched_date`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_DATE` または `MYSQL_TYPE_NEWDATE` 型のカラムの合計数。
`proto_binary_fetched_date`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_DATE` または `MYSQL_TYPE_NEWDATE` 型のカラムの合計数。
`proto_text_fetched_year`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_YEAR` 型のカラムの合計数。
`proto_binary_fetched_year`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_YEAR` 型のカラムの合計数。
`proto_text_fetched_time`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_TIME` 型のカラムの合計数。
`proto_binary_fetched_time`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_TIME` 型のカラムの合計数。
`proto_text_fetched_datetime`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_DATETIME` 型のカラムの合計数。
`proto_binary_fetched_datetime`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_DATETIME` 型のカラムの合計数。
`proto_text_fetched_timestamp`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_TIMESTAMP` 型のカラムの合計数。
`proto_binary_fetched_timestamp`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_TIMESTAMP` 型のカラムの合計数。
`proto_text_fetched_string`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_STRING`、`MYSQL_TYPE_VARSTRING`、または `MYSQL_TYPE_VARCHAR` 型のカラムの合計数。
`proto_binary_fetched_string`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_STRING`、`MYSQL_TYPE_VARSTRING`、または `MYSQL_TYPE_VARCHAR` 型のカラムの合計数。
`proto_text_fetched_blob`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_TINY_BLOB`、 `MYSQL_TYPE_MEDIUM_BLOB`、 `MYSQL_TYPE_LONG_BLOB`、 または `MYSQL_TYPE_BLOB` 型のカラムの合計数。
`proto_binary_fetched_blob`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_TINY_BLOB`、 `MYSQL_TYPE_MEDIUM_BLOB`、 `MYSQL_TYPE_LONG_BLOB`、 または `MYSQL_TYPE_BLOB` 型のカラムの合計数。
`proto_text_fetched_enum`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_ENUM` 型のカラムの合計数。
`proto_binary_fetched_enum`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_ENUM` 型のカラムの合計数。
`proto_text_fetched_set`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_SET` 型のカラムの合計数。
`proto_binary_fetched_set`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_SET` 型のカラムの合計数。
`proto_text_fetched_geometry`
  通常のクエリ（MySQL テキストプロトコル）から取得した `MYSQL_TYPE_GEOMETRY` 型のカラムの合計数。
`proto_binary_fetched_geometry`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した `MYSQL_TYPE_GEOMETRY` 型のカラムの合計数。
`proto_text_fetched_other`
  通常のクエリ（MySQL テキストプロトコル）から取得した、 上記に記載されていない `MYSQL_TYPE_*` 型のカラムの合計数。

  > 注意: 理論上、これは常に `0` になるはずです。

`proto_binary_fetched_other`
  プリペアドステートメント（MySQL バイナリプロトコル）から取得した、 上記に記載されていない `MYSQL_TYPE_*` 型のカラムの合計数。

  > 注意: 理論上、これは常に `0` になるはずです。

接続関連の統計情報
`connect_success`
  成功した接続試行の合計数。

  > 注意: `connect_success` には、成功した持続的接続と 非持続的接続の試行の合計が含まれます。 したがって、成功した非持続的接続の試行数は `connect_success - pconnect_success` となります。

`pconnect_success`
  成功した持続的接続試行の合計数。
`connect_failure`
  失敗した接続試行の合計数。
`reconnect`
  これはプロセスレベルのスコープの統計情報です。
`active_connections`
  これはプロセスレベルのスコープの統計情報です。 アクティブな持続的接続と非持続的接続の合計数。

  > 注意: アクティブな非持続的接続の合計数は `active_connections - active_persistent_connections` です。

`active_persistent_connections`
  これはプロセスレベルのスコープの統計情報です。 アクティブな持続的接続の合計数。
`explicit_close`
  明示的に閉じられた接続の合計数。

  例1 明示的なクローズが発生するコードスニペットの例

  -     $link = new mysqli(/* ... */);
        $link->close(/* ... */);

  -     $link = new mysqli(/* ... */);
        $link->connect(/* ... */);

`implicit_close`
  暗黙的に閉じられた接続の合計数。

  例2 暗黙的なクローズが発生するコードスニペットの例

  -     $link = new mysqli(/* ... */);
        $link->real_connect(/* ... */);

  - `unset($link)`
  - 持続的接続: プールされた接続が real_connect で作成されており、未知のオプションが設定されている可能性がある場合、 未知のオプションが設定された接続を返すことを避けるために暗黙的にクローズする
  - 持続的接続: ping/change_user が失敗し、ext/mysqli が接続をクローズする場合
  - スクリプト実行の終了時: ユーザーが閉じなかった接続を 自動的にクローズする
`disconnect_close`
  接続確立時に C API の `mysql_real_connect` 呼び出しが示す接続失敗。
`in_middle_of_command_close`
  これはプロセスレベルのスコープの統計情報です。 コマンド実行の途中でクローズされた接続 （未取得の結果セットがある状態、クエリ送信後かつ応答受信前、 データフェッチ中、LOAD DATA でのデータ転送中）。
  警告

  非同期クエリを使用していない限り、 これは PHP アプリケーションが予期せず終了し、 PHP が自動的に接続をクローズした場合にのみ発生するはずです。

`init_command_executed_count`
  init コマンドの実行回数の合計。 例: `mysqli_options(MYSQLI_INIT_COMMAND , $value)`。 成功した実行回数は `init_command_executed_count - init_command_failed_count` です。
`init_command_failed_count`
  失敗した init コマンドの合計数。

`COM_*` コマンド関連の統計情報
`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`
  PHP から MySQL に特定の `COM_*` コマンドを送信した試行回数の合計。 統計情報は、回線の確認後、対応する MySQL クライアントサーバープロトコルパケットを 送信する直前にインクリメントされます。
  警告

  MySQLnd がパケットの送信に失敗した場合でも、統計情報はデクリメントされません。 失敗した場合、MySQLnd は PHP の警告 Error while sending %s packet. PID=%d. を発行します。

  例3 使用例

  - PHP が特定のコマンドを MySQL に送信しているかどうかを確認する。 たとえば、クライアントが `COM_PROCESS_KILL` を送信しているかどうかを確認する
  - `COM_EXECUTE` と `COM_PREPARE` を比較して、 プリペアドステートメントの平均実行回数を算出する
  - `COM_QUERY` がゼロかどうかを確認して、 PHP がプリペアドステートメント以外の SQL 文を実行していないかどうかを確認する
  - `COM_QUERY` と `COM_EXECUTE` を確認して、 過剰な数の SQL 文を実行している PHP スクリプトを特定する

その他の統計情報
`explicit_stmt_close`
`implicit_stmt_close`
  これはプロセスレベルのスコープの統計情報です。 クローズされたプリペアドステートメントの合計数。

  > 注意: プリペアドステートメントは常に明示的にクローズされます。暗黙的にクローズされるのは、 準備に失敗した場合だけです。

`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`
  これはプロセスレベルのスコープの統計情報です。 メモリ管理の呼び出し。
`command_buffer_too_small`
  PHP から MySQL にコマンドを送信する際に、ネットワークコマンドバッファが 拡張された回数。 MySQLnd は各接続に対して mysqlnd.net_cmd_buffer_size バイトの内部コマンド/ネットワークバッファを割り当てます。 MySQL クライアントサーバープロトコルコマンド、 たとえば `COM_QUERY`（通常のクエリ）が バッファに収まらない場合、 MySQLnd はコマンドの送信に必要なサイズまでバッファを拡張します。 ある接続でバッファが拡張されるたびに、 `command_buffer_too_small` が 1 増加します。 MySQLnd がほぼすべての接続で初期サイズの mysqlnd.net_cmd_buffer_size バイトを超えてバッファを拡張する必要がある場合は、 再割り当てを避けるためにデフォルトサイズの増加を検討すべきです。
`connection_reused`
  持続的接続が再利用された合計回数。

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