PDF (US Ltr)
- 26.8Mb
PDF (A4)
- 26.8Mb
クエリー解析プローブは、元の 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