Spec-Zone .ru
спецификации, руководства, описания, API
|
Зонды парсинга запроса инициированы прежде, чем исходный SQL-оператор анализируется и когда парсинг оператора и определение модели выполнения, требуемой обработать оператор, были завершены:
query-parse-start(query)query-parse-done(status)
query-parse-start
: Инициированный непосредственно перед
тем, как оператор анализируется синтаксическим анализатором запроса MySQL. Единственный параметр, query
, строка, содержащая полный текст исходного запроса.
query-parse-done
: Инициированный, когда парсинг
исходного оператора был завершен. status
целое число, описывающее состояние
работы. A 0
указывает, что запрос был успешно проанализирован. A 1
указывает что парсинг отказавшего запроса.
Например, Вы могли контролировать время выполнения для того, чтобы проанализировать данный запрос, используя следующий сценарий D:
#!/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));}
В вышеупомянутом сценарии предикат используется на query-parse-done
так, чтобы
различный вывод был сгенерирован основанный на значении состояния зонда.
Выполняя сценарий и контролируя выполнение:
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