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


5.4.1.4 クエリー解析プローブ

クエリー解析プローブは、元の SQL ステートメントが解析される前と、ステートメントの解析およびステートメントの処理に必要な実行モデルの決定が完了したときにトリガーされます。

query-parse-start(query)
query-parse-done(status)
  • query-parse-start: ステートメントが MySQL クエリーパーサーによって解析される直前にトリガーされます。単一の引数 query は、元のクエリーの完全なテキストを格納する文字列です。

  • query-parse-done: 元のステートメントの解析が完了したときにトリガーされます。status は、操作のステータスを記述する整数です。0 は、クエリーが正常に解析されたことを示します。1 は、クエリーの解析が失敗したことを示します。

たとえば、次の D スクリプトを使用して、所定のクエリーを解析するための実行時間をモニターすることができます。

#!/usr/sbin/dtrace -s

#pragma D option quiet

mysql*:::query-parse-start
{
   self->parsestart = timestamp;
   self->parsequery = copyinstr(arg0);
}

mysql*:::query-parse-done
/arg0 == 0/
{
   printf("Parsing %s: %d microseconds\n", self->parsequery,((timestamp - self->parsestart)/1000));
}

mysql*:::query-parse-done
/arg0 != 0/
{
   printf("Error parsing %s: %d microseconds\n", self->parsequery,((timestamp - self->parsestart)/1000));
}

前述のスクリプトで、query-parse-done に述語を使用することで、プローブのステータス値に基づいて異なる出力が生成されます。

スクリプトを実行して実行をモニターすると、次のようになります。

shell> ./query-parsing.d
Error parsing select from t1 join (t2) on (t1.i = t2.i) order by t1.s,t1.i limit 10: 36 ms
Parsing select * from t1 join (t2) on (t1.i = t2.i) order by t1.s,t1.i limit 10: 176 ms

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