Spec-Zone .ru
спецификации, руководства, описания, API
|
The query parsing probes are triggered before the original SQL statement is parsed and when the parsing of the statement and determination of the execution model required to process the statement has been completed:
query-parse-start(query)query-parse-done(status)
query-parse-start
: Triggered just before the statement
is parsed by the MySQL query parser. The single argument, query
, is a
string containing the full text of the original query.
query-parse-done
: Triggered when the parsing of the
original statement has been completed. The status
is an integer describing
the status of the operation. A 0
indicates that the query was successfully
parsed. A 1
indicates that the parsing of the query failed.
For example, you could monitor the execution time for parsing a given query using the following D script:
#!/usr/sbin/dtrace -s#pragma D option quietmysql*:::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));}
In the above script a predicate is used on query-parse-done
so that different
output is generated based on the status value of the probe.
When running the script and monitoring the execution:
shell> ./query-parsing.dError parsing select from t1 join (t2) on (t1.i = t2.i) order by t1.s,t1.i limit 10: 36 msParsing select * from t1 join (t2) on (t1.i = t2.i) order by t1.s,t1.i limit 10: 176 ms