result_set_queries |
Connection |
結果セットを生成したクエリの数。結果セットを生成するクエリの例: SELECT,
SHOW. 結果セットのヘッダパケットを読み取っている間にエラーが発生した場合、この統計値はインクリメントされません |
たとえば、データベースに高い負荷をかけているクライアントを特定する目的で、PHP が MySQL に送信したクエリの数を間接的に測るのに使えます。 |
non_result_set_queries |
Connection |
結果セットを生成しなかったクエリの数。結果セットを生成しないクエリの例:INSERT, UPDATE, LOAD DATA。結果セットのヘッダパケットを読み取っている間にエラーが発生した場合、この統計値はインクリメントされません。 |
同上 |
no_index_used |
Connection |
結果セットを生成したが、インデックスを使わなかったクエリの数 (mysqld の起動オプション -log-queries-not-using-indexes も参照してください) こうしたクエリを記録したい場合、mysqli_report(MYSQLI_REPORT_INDEX) を使って ext/mysqli に例外をスローさせることができます。例外ではなく警告にとどめたい場合は、mysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT) を使ってください。 |
|
bad_index_used |
Connection |
結果セットを生成したが、良いインデックスを使わなかったクエリの数 (mysqld の起動オプション -log-slow-queries も参照してください) |
こうしたクエリを記録したい場合、mysqli_report(MYSQLI_REPORT_INDEX) を使って ext/mysqli に例外をスローさせることができます。例外ではなく警告にとどめたい場合は、mysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT) を使ってください。 |
slow_queries |
Connection |
実行に long_query_time 秒以上かかり、少なくとも min_examined_row_limit 行以上調べる必要があるSQL |
mysqli_report()関数では記録できません |
buffered_sets |
Connection |
"通常の" クエリで返された結果セットのうち、バッファリングされたものの数。"通常の" というのは、右の「注意点」で述べている "プリペアドステートメントのことではありません" |
結果セットをクライアント側にバッファリングするAPI呼び出しの例:
mysql_query(),
mysqli_query(),
mysqli_store_result(),
mysqli_stmt_get_result()
結果セットをクライアント側にバッファリングすると、サーバ側のリソースが迅速に解放され、結果セットを走査しやすくなります。欠点としては、クライアント側のメモリ消費が、バッファリングする分だけ増えてしまうということです。mysqlnd は、PHP の内部的なメモリ管理関数を使っているため、(MySQL Client Library とは異なり) PHP 側の memory_limit の設定を尊重することに注意してください。同じ理由で memory_get_usage() 関数の実行結果は、MySQL Client Library と比べて高いメモリ使用量を報告します。memory_get_usage() 関数は MySQL Client Library のメモリ使用量を全く計測しません。なぜなら、MySQL Client Library は この関数が監視する PHP の内部メモリ管理関数を使用していないからです! |
unbuffered_sets |
Connection |
通常の(プリペアドステートメントではない) クエリによって返された、バッファリングされていない結果セットの数 |
クライアント側で結果セットがバッファリングされないAPI呼び出しの例:
mysqli_use_result() |
ps_buffered_sets |
Connection |
プリペアドステートメントによって返される、バッファリングされた結果セットの数。デフォルトでは、プリペアドステートメントはバッファリングされません。 |
クライアント側で結果セットがバッファリングされるAPI呼び出しの例:
mysqli_stmt_store_result |
ps_unbuffered_sets |
Connection |
プリペアドステートメントによって返される、バッファリングされない結果セットの数。 |
デフォルトでは、プリペアドステートメントはバッファリングされません。 |
flushed_normal_sets |
Connection |
通常の(プリペアドステートメントではない) クエリから返された、クライアントが読み取っていないため黙ってフラッシュされたデータが残っている結果セットの数。フラッシュはバッファリングされていない結果セットの場合だけ起こります。 |
バッファリングされていない結果セットは、新しいクエリが実行される前に完全に取得されなければなりません。そうでない場合、MySQL はエラーを生成します。アプリケーションがバッファリングされていない結果セットからすべての行を取得していない場合、mysqlnd は行をクリアするため暗黙のうちに結果セットをフラッシュします。rows_skipped_normal や、rows_skipped_ps も参照してください。暗黙のフラッシュが起こりうる原因を以下に示します:
|
flushed_ps_sets |
Connection |
プリペアドステートメントのクエリから返された、クライアントが読み取っていないため黙ってフラッシュされたデータが残っている結果セットの数。フラッシュはバッファリングされていない結果セットの場合だけ起こります。 |
同上 |
ps_prepared_never_executed |
Connection |
準備(prepare)されたが、決して実行されないステートメントの数 |
プリペアドステートメントはサーバのリソースを占有します。実行する予定がない場合、ステートメントを準備すべきではありません。 |
ps_prepared_once_executed |
Connection |
一度だけ実行されたプリペアドステートメントの数 |
プリペアドステートメントの背後にあるアイディアのうちのひとつは、同じクエリは繰り返し繰り返し(異なるパラメーターで)実行されるんだから、ステートメントの実行が準備と実行に分かれていれば、クエリのパースやほかの準備処理はキャッシュできる、というものです。 このアイディアは準備を一度行い、その結果を "キャッシュ" します。たとえば解析ツリーを複数のステートメントの実行時に再利用するのです。プリペアドステートメントが一度だけしか実行されない場合、二段階に処理が分かれていることは "通常の"クエリに比べて非効率かもしれません。なぜなら、すべてのキャッシュは余計なものであり、その情報を保持するためにサーバは(限られた)リソースを消費しているからです。結果的に、一度しか実行されていないプリペアドステートメントはパフォーマンスを害する原因になる可能性があります。
|
rows_fetched_from_server_normal,
rows_fetched_from_server_ps |
Connection |
クライアントが消費していたかいないかに関わらず、MySQLから取得に成功した結果セット行の合計数。行によっては、クライアントアプリケーションは取得しないため暗黙のうちにフラッシュされている場合があります。 |
packets_received_rset_row も参照してください |
rows_buffered_from_client_normal,
rows_buffered_from_client_ps |
Connection |
通常のクエリ、またはプリペアドステートメントから生成された、バッファリングに成功した行の合計数。これは MySQL から取得され、クライアントにバッファリングされた行の数です。バッファリングに成功した行については、ふたつの全く別な統計値があることに注意してください。(MySQL から mysqlnd の内部バッファに)バッファリングされた行の数と、(mysqlnd の内部バッファからクライアントアプリケーションへ)取得され、バッファリングされた行の数です。バッファリングされた行数が、取得されてバッファリングされた行より多い場合、クライアントアプリケーションが必要以上に大きな結果セットを生成しているため、クライアントが読み取らない行ができてしまっている可能性があります。 |
結果をバッファリングするクエリの例:
mysqli_query(),
mysqli_store_result() |
rows_fetched_from_client_normal_buffered,
rows_fetched_from_client_ps_buffered |
Connection |
バッファリングされた結果セットからクライアントによって取得された行の合計数。この結果セットは通常のクエリとプリペアドステートメントの両方から生成されたものです。 |
|
rows_fetched_from_client_normal_unbuffered,
rows_fetched_from_client_ps_unbuffered |
Connection |
バッファリングされて「いない」結果セットからクライアントによって取得された行の合計数。この結果セットは通常のクエリとプリペアドステートメントの両方から生成されたものです。 |
|
rows_fetched_from_client_ps_cursor |
Connection |
プリペアドステートメントによって生成されたカーソルから、クライアントが取得した行の合計数 |
|
rows_skipped_normal,
rows_skipped_ps |
Connection |
将来のために予約されています(今のところサポートされていません) |
|
copy_on_write_saved,
copy_on_write_performed |
Process |
mysqlnd では、エクステンションから返された値は mysqlnd 内部にある通信結果のバッファを指しています。開発者が値を変更しなければ、取得されたデータは一度だけメモリに保持されます。値を変更した場合、mysqlnd は 内部にある通信結果のバッファを変更から保護するために コピーオンライト を実行しなければなりません。MySQL Client Library を使うと、取得したデータを二度メモリに保持します。MySQL Client Library の内部バッファと変数の値がエクステンションによって返されるのです。理論上、mysqlnd は40%のメモリを節約できます。しかし、メモリに保持されている量は memory_get_usage()関数では計測できないことに注意してください。 |
|
explicit_free_result,
implicit_free_result |
Connection, Process (プリペアドステートメントのクリーンアップ時のみ) |
解放された結果セットの合計数 |
ここでいう「解放」とは明示的なもので、初期化コマンドで生成された結果セットを除きます。たとえば mysqli_options(MYSQLI_INIT_COMMAND , ...) 関数の呼び出しがそれにあたります。 |
proto_text_fetched_null,
proto_text_fetched_bit,
proto_text_fetched_tinyint
proto_text_fetched_short,
proto_text_fetched_int24,
proto_text_fetched_int
proto_text_fetched_bigint,
proto_text_fetched_decimal,
proto_text_fetched_float
proto_text_fetched_double,
proto_text_fetched_date,
proto_text_fetched_year
proto_text_fetched_time,
proto_text_fetched_datetime,
proto_text_fetched_timestamp
proto_text_fetched_string,
proto_text_fetched_blob,
proto_text_fetched_enum
proto_text_fetched_set,
proto_text_fetched_geometry,
proto_text_fetched_other |
Connection |
通常のクエリ(MySQL テキストプロトコル) から取得したあるタイプのカラムの合計数 |
C API/ MySQL のメタデータと 統計の名前の対応:
-
MYSQL_TYPE_NULL - proto_text_fetched_null
-
MYSQL_TYPE_BIT - proto_text_fetched_bit
-
MYSQL_TYPE_TINY - proto_text_fetched_tinyint
-
MYSQL_TYPE_SHORT - proto_text_fetched_short
-
MYSQL_TYPE_INT24 - proto_text_fetched_int24
-
MYSQL_TYPE_LONG - proto_text_fetched_int
-
MYSQL_TYPE_LONGLONG -
proto_text_fetched_bigint
-
MYSQL_TYPE_DECIMAL,
MYSQL_TYPE_NEWDECIMAL -
proto_text_fetched_decimal
-
MYSQL_TYPE_FLOAT - proto_text_fetched_float
-
MYSQL_TYPE_DOUBLE -
proto_text_fetched_double
-
MYSQL_TYPE_DATE,
MYSQL_TYPE_NEWDATE - proto_text_fetched_date
-
MYSQL_TYPE_YEAR - proto_text_fetched_year
-
MYSQL_TYPE_TIME - proto_text_fetched_time
-
MYSQL_TYPE_DATETIME -
proto_text_fetched_datetime
-
MYSQL_TYPE_TIMESTAMP -
proto_text_fetched_timestamp
-
MYSQL_TYPE_STRING,
MYSQL_TYPE_VARSTRING,
MYSQL_TYPE_VARCHAR -
proto_text_fetched_string
-
MYSQL_TYPE_TINY_BLOB,
MYSQL_TYPE_MEDIUM_BLOB,
MYSQL_TYPE_LONG_BLOB,
MYSQL_TYPE_BLOB - proto_text_fetched_blob
-
MYSQL_TYPE_ENUM - proto_text_fetched_enum
-
MYSQL_TYPE_SET - proto_text_fetched_set
-
MYSQL_TYPE_GEOMETRY -
proto_text_fetched_geometry
-
上記にない MYSQL_TYPE_* (ないはずですが) - proto_text_fetched_other
MYSQL_*-type 定数は、 MySQL の各バージョンの同じSQLカラムタイプと結びついているとは限らないことに注意してください。
|
proto_binary_fetched_null,
proto_binary_fetched_bit,
proto_binary_fetched_tinyint
proto_binary_fetched_short,
proto_binary_fetched_int24,
proto_binary_fetched_int,
proto_binary_fetched_bigint,
proto_binary_fetched_decimal,
proto_binary_fetched_float,
proto_binary_fetched_double,
proto_binary_fetched_date,
proto_binary_fetched_year,
proto_binary_fetched_time,
proto_binary_fetched_datetime,
proto_binary_fetched_timestamp,
proto_binary_fetched_string,
proto_binary_fetched_blob,
proto_binary_fetched_enum,
proto_binary_fetched_set,
proto_binary_fetched_geometry,
proto_binary_fetched_other |
Connection |
プリペアドステートメント(MySQL バイナリプロトコル) から取得したあるタイプのカラムの合計数 |
カラムタイプと統計の名前の対応は、上の proto_text_* を参照してください |