Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


13.7.5.31 SHOW PROFILE 構文

SHOW PROFILE [type [, type] ... ]
    [FOR QUERY n]
    [LIMIT row_count [OFFSET offset]]

type:
    ALL
  | BLOCK IO
  | CONTEXT SWITCHES
  | CPU
  | IPC
  | MEMORY
  | PAGE FAULTS
  | SOURCE
  | SWAPS

SHOW PROFILE および SHOW PROFILES ステートメントは、現在のセッションの過程で実行されたステートメントのリソース使用状況を示すプロファイリング情報を表示します。

注記

これらのステートメントは、MySQL 5.6.7 の時点では非推奨であり、将来の MySQL リリースで削除される予定です。代わりに、パフォーマンススキーマを使用してください。第22章「MySQL パフォーマンススキーマを参照してください。

プロファイリングは、profiling セッション変数によって制御されます。このデフォルト値は 0 (OFF) です。プロファイリングは、profiling を 1 または ON に設定することによって有効になります。

mysql> SET profiling = 1;

SHOW PROFILES は、サーバーに送信された最新のステートメントのリストを表示します。このリストのサイズは、profiling_history_size セッション変数によって制御されます。このデフォルト値は 15 です。最大値は 100 です。この値を 0 に設定すると、実質的にプロファイリングが無効になります。

SHOW PROFILESHOW PROFILES を除くすべてのステートメントがプロファイルされるため、このどちらのステートメントもプロファイルリスト内に見つかりません。不正な形式のステートメントはプロファイルされます。たとえば、SHOW PROFILING は不正なステートメントであるため、それを実行しようとすると構文エラーが発生しますが、プロファイリングリストには表示されます。

SHOW PROFILE は、1 つのステートメントに関する詳細情報を表示します。FOR QUERY n 句を指定しない場合、出力は、直近で実行されたステートメントに関連したものになります。FOR QUERY n が含まれている場合、SHOW PROFILE は、ステートメント n に関する情報を表示します。n の値は、SHOW PROFILES によって表示される Query_ID 値に対応します。

LIMIT row_count 句を指定すると、出力を row_count 行に制限できます。LIMIT が指定されている場合は、OFFSET offset を追加することで、行セット全体が offset 行分オフセットされた状態で出力を開始できます。

デフォルトでは、SHOW PROFILEStatus および Duration カラムを表示します。この Status 値は SHOW PROCESSLIST によって表示される State 値に似ていますが、一部のステータス値では、この 2 つのステートメントの解釈にわずかな違いがいくつか存在する可能性があります (セクション8.12.5「スレッド情報の検査」を参照してください)。

オプションの type 値を指定すると、次のその他の特定のタイプの情報を表示できます。

  • ALL は、すべての情報を表示します

  • BLOCK IO は、ブロック入力および出力操作の数を表示します

  • CONTEXT SWITCHES は、自発的および非自発的コンテキストスイッチの数を表示します

  • CPU は、ユーザーとシステムの CPU 使用時間を表示します

  • IPC は、送受信されたメッセージの数を表示します

  • MEMORY は現在、実装されていません

  • PAGE FAULTS は、メジャーおよびマイナーページフォルトの数を表示します

  • SOURCE は、ソースコードの関数の名前を、その関数が含まれているファイルの名前および行番号とともに表示します

  • SWAPS は、スワップ数を表示します

プロファイリングは、セッション単位で有効になります。セッションが終了すると、そのプロファイリング情報は失われます。

mysql> SELECT @@profiling;
+-------------+
| @@profiling |
+-------------+
|           0 |
+-------------+
1 row in set (0.00 sec)

mysql> SET profiling = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> DROP TABLE IF EXISTS t1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE TABLE T1 (id INT);
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW PROFILES;
+----------+----------+--------------------------+
| Query_ID | Duration | Query                    |
+----------+----------+--------------------------+
|        0 | 0.000088 | SET PROFILING = 1        |
|        1 | 0.000136 | DROP TABLE IF EXISTS t1  |
|        2 | 0.011947 | CREATE TABLE t1 (id INT) |
+----------+----------+--------------------------+
3 rows in set (0.00 sec)

mysql> SHOW PROFILE;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| checking permissions | 0.000040 |
| creating table       | 0.000056 |
| After create         | 0.011363 |
| query end            | 0.000375 |
| freeing items        | 0.000089 |
| logging slow query   | 0.000019 |
| cleaning up          | 0.000005 |
+----------------------+----------+
7 rows in set (0.00 sec)

mysql> SHOW PROFILE FOR QUERY 1;
+--------------------+----------+
| Status             | Duration |
+--------------------+----------+
| query end          | 0.000107 |
| freeing items      | 0.000008 |
| logging slow query | 0.000015 |
| cleaning up        | 0.000006 |
+--------------------+----------+
4 rows in set (0.00 sec)

mysql> SHOW PROFILE CPU FOR QUERY 2;
+----------------------+----------+----------+------------+
| Status               | Duration | CPU_user | CPU_system |
+----------------------+----------+----------+------------+
| checking permissions | 0.000040 | 0.000038 |   0.000002 |
| creating table       | 0.000056 | 0.000028 |   0.000028 |
| After create         | 0.011363 | 0.000217 |   0.001571 |
| query end            | 0.000375 | 0.000013 |   0.000028 |
| freeing items        | 0.000089 | 0.000010 |   0.000014 |
| logging slow query   | 0.000019 | 0.000009 |   0.000010 |
| cleaning up          | 0.000005 | 0.000003 |   0.000002 |
+----------------------+----------+----------+------------+
7 rows in set (0.00 sec)
注記

一部のアーキテクチャーでは、プロファイリングが部分的にしか機能しません。getrusage() システムコールに依存する値の場合、このシステムコールをサポートしていない Windows などのシステムでは NULL が返されます。さらに、プロファイリングはスレッド単位ではなく、プロセス単位です。つまり、サーバー内の、ユーザー独自のスレッド以外のスレッド上のアクティビティーが、ユーザーに表示されるタイミング情報に影響を与える可能性があります。

プロファイリング情報はまた、INFORMATION_SCHEMA 内の PROFILING テーブルからも取得できます。セクション21.16「INFORMATION_SCHEMA PROFILING テーブル」を参照してください。たとえば、次のクエリーは同じ結果を生成します。

SHOW PROFILE FOR QUERY 2;

SELECT STATE, FORMAT(DURATION, 6) AS DURATION
FROM INFORMATION_SCHEMA.PROFILING
WHERE QUERY_ID = 2 ORDER BY SEQ;

User Comments
Sign Up Login You must be logged in to post a comment.