SHOW PROFILE [type
[,type
] ... ] [FOR QUERYn
] [LIMITrow_count
[OFFSEToffset
]]type
: ALL | BLOCK IO | CONTEXT SWITCHES | CPU | IPC | MEMORY | PAGE FAULTS | SOURCE | SWAPS
SHOW PROFILES
および SHOW
PROFILE
ステートメントは、現在のセッションの過程で実行されるステートメントのリソースの使用状況を示すプロファイリング情報を表示します。
プロファイリングは、profiling
セッション変数によって制御されます。このデフォルト値は
0 (OFF
) です。
プロファイリングは、profiling
を 1 または ON
に設定することによって有効になります。
mysql> SET profiling = 1;
SHOW PROFILES
は、マスターに送信される最新のステートメントのリストを表示します。このリストのサイズは、profiling_history_size
セッション変数によって制御されます。このデフォルト値は
15 です。最大値は 100 です。この値を 0
に設定すると、実質的にプロファイリングが無効になります。
SHOW PROFILES
と SHOW
PROFILE
を除くすべてのステートメントがプロファイルされるため、プロファイルリストにはこのどちらのステートメントも見つかりません。誤った形式のステートメントはプロファイルされます。たとえば、SHOW
PROFILING
は不正なステートメントであるため、実行しようとすると構文エラーが発生しますが、プロファイリングリストには表示されます。
SHOW PROFILE
は、1
つのステートメントに関する詳細情報を表示します。FOR
QUERY
節が指定されていない場合は、もっとも最近実行されたステートメントが出力されます。n
FOR
QUERY
が含まれている場合、n
SHOW
PROFILE
は、ステートメント
n
の情報を表示します。n
の値は、SHOW
PROFILES
によって表示される
Query_ID
値に対応しています。
出力を row_count
行に制限するために、LIMIT
節を指定できます。row_count
LIMIT
が指定されている場合は、OFFSET
を追加することにより、行のセット全体への
offset
offset
行の出力を開始することができます。
デフォルトでは、SHOW
PROFILE
は
Status
および
Duration
カラムを表示します。Status
値は、SHOW
PROCESSLIST
によって表示される
State
値に似ていますが、一部のステータス値に対する
2
つのステートメントの解釈で、わずかな違いがいくつか存在する可能性があります
(項4.5.6. 「スレッド情報の検査」 を参照)。
特定のタイプの追加情報を表示するために、オプションの
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
が返されます。さらに、プロファイリングはスレッド単位ではなく、プロセス単位です。
つまり、サーバー内の、ユーザー独自のスレッド以外のスレッド上のアクティビティーが、ユーザーに表示されるタイミング情報に影響を与える可能性があります。
SHOW PROFILES
と SHOW
PROFILE
は、MySQL 5.1.24 で追加されました
(ただし、デフォルトでは 5.1.28
までバイナリ配布に追加されませんでした)。
また、プロファイリング情報は、INFORMATION_SCHEMA
内の PROFILING
テーブルから取得することもできます。
詳しくはThe INFORMATION_SCHEMA PROFILING
Tableを参照してください。たとえば、次のクエリーは同じ結果を生成します。
SHOW PROFILE FOR QUERY 2; SELECT STATE, FORMAT(DURATION, 6) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID = 2 ORDER BY SEQ;