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 — is 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 — is 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 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));
}
        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.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
Add your own comment.