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


5.4.1.3 クエリープローブ

query-start および query-done プローブは、特定のクエリーがサーバーによって受け取られ、クエリーが実行され、情報がクライアントに正常に送信されたときにトリガーされます。

query-start(query, connectionid, database, user, host)
query-done(status)
  • query-start: クライアントからクエリー文字列を受け取ったあとトリガーされます。引数は次のとおりです。

    • query: 送信されたクエリーの完全なテキスト。

    • connectionid: クエリーを送信したクライアントの接続 ID。この接続 ID は、クライアントが最初に接続したときに返される接続 ID と、SHOW PROCESSLIST からの出力の Id 値と同じです。

    • database: クエリーが実行されるデータベース名。

    • user: サーバーへの接続に使用されるユーザー名。

    • host: クライアントのホスト名。

  • query-done: クエリーが実行されて、クライアントに情報が返されたときにトリガーされます。このプローブは単一の引数 status を格納し、クエリーが正常に実行されると 0 を返し、エラーが発生した場合は 1 を返します。

次の D スクリプトを使用して、各クエリーの実行時間についての単純なレポートを取得することができます。

#!/usr/sbin/dtrace -s

#pragma D option quiet

dtrace:::BEGIN
{
   printf("%-20s %-20s %-40s %-9s\n", "Who", "Database", "Query", "Time(ms)");
}

mysql*:::query-start
{
   self->query = copyinstr(arg0);
   self->connid = arg1;
   self->db    = copyinstr(arg2);
   self->who   = strjoin(copyinstr(arg3),strjoin("@",copyinstr(arg4)));
   self->querystart = timestamp;
}

mysql*:::query-done
{
   printf("%-20s %-20s %-40s %-9d\n",self->who,self->db,self->query,
          (timestamp - self->querystart) / 1000000);
}

前述のスクリプトを実行すると、クエリーの実行時間についての基本的な概要が理解できるはずです。

shell> ./query.d
Who                  Database             Query                                    Time(ms)
root@localhost       test                 select * from t1 order by i limit 10     0
root@localhost       test                 set global query_cache_size=0            0
root@localhost       test                 select * from t1 order by i limit 10     776
root@localhost       test                 select * from t1 order by i limit 10     773
root@localhost       test                 select * from t1 order by i desc limit 10 795