Spec-Zone .ru
спецификации, руководства, описания, API

5.7.1.12. Зонды оператора

Отдельные зонды оператора обеспечиваются, чтобы дать определенную информацию о различных типах оператора. Поскольку зонды запуска строка запроса обеспечиваются как единственный параметр. В зависимости от типа оператора будет отличаться информация, предоставленная соответствующим сделанным зондом. Для всех сделанных зондов состояние работы (0 для успеха, >0 для отказа), обеспечивается. Для SELECT, INSERT, INSERT ... (SELECT FROM ...), DELETE, и DELETE FROM t1,t2 операции число строк, на которые влияют, возвращаются.

Для UPDATE и UPDATE t1,t2 ... обеспечиваются операторы, которые число строк соответствовало и число строк, фактически измененных. Это то, потому что число строк, фактически соответствующих соответствием WHERE пункт, и число измененных строк могут отличаться. MySQL не обновляет значение строки, если значение уже соответствует новую установку.

select-start(query)select-done(status,rows)insert-start(query)insert-done(status,rows)insert-select-start(query)insert-select-done(status,rows)update-start(query)update-done(status,rowsmatched,rowschanged)multi-update-start(query)multi-update-done(status,rowsmatched,rowschanged)delete-start(query)delete-done(status,rows)multi-delete-start(query)multi-delete-done(status,rows)

Параметры за зонды оператора:

Вы используете эти зонды, чтобы контролировать выполнение этих типов оператора, не имея необходимость контролировать пользователя или клиент, выполняющий операторы. Простой пример этого должен отследить времена выполнения:

#!/usr/sbin/dtrace -s#pragma D option quietdtrace:::BEGIN{   printf("%-60s %-8s %-8s %-8s\n", "Query", "RowsU", "RowsM", "Dur (ms)");}mysql*:::update-start, mysql*:::insert-start,mysql*:::delete-start, mysql*:::multi-delete-start,mysql*:::multi-delete-done, mysql*:::select-start,mysql*:::insert-select-start, mysql*:::multi-update-start{    self->query = copyinstr(arg0);    self->querystart = timestamp;}mysql*:::insert-done, mysql*:::select-done,mysql*:::delete-done, mysql*:::multi-delete-done, mysql*:::insert-select-done/ self->querystart /{    this->elapsed = ((timestamp - self->querystart)/1000000);    printf("%-60s %-8d %-8d %d\n",           self->query,           0,           arg1,           this->elapsed);    self->querystart = 0;}mysql*:::update-done, mysql*:::multi-update-done/ self->querystart /{    this->elapsed = ((timestamp - self->querystart)/1000000);    printf("%-60s %-8d %-8d %d\n",           self->query,           arg1,           arg2,           this->elapsed);    self->querystart = 0;}

Когда выполняющийся можно видеть основные времена выполнения и соответствия строк:

Query                                                        RowsU    RowsM    Dur (ms)select * from t2                                             0        275      0insert into t2 (select * from t2)                            0        275      9update t2 set i=5 where i > 75                               110      110      8update t2 set i=5 where i < 25                               254      134      12delete from t2 where i < 5                                   0        0        0

Другая альтернатива должна использовать функции агрегации в DTrace, чтобы агрегировать время выполнения отдельных операторов вместе:

#!/usr/sbin/dtrace -s#pragma D option quietmysql*:::update-start, mysql*:::insert-start,mysql*:::delete-start, mysql*:::multi-delete-start,mysql*:::multi-delete-done, mysql*:::select-start,mysql*:::insert-select-start, mysql*:::multi-update-start{    self->querystart = timestamp;}mysql*:::select-done{        @statements["select"] = sum(((timestamp - self->querystart)/1000000));}mysql*:::insert-done, mysql*:::insert-select-done{        @statements["insert"] = sum(((timestamp - self->querystart)/1000000));}mysql*:::update-done, mysql*:::multi-update-done{        @statements["update"] = sum(((timestamp - self->querystart)/1000000));}mysql*:::delete-done, mysql*:::multi-delete-done{        @statements["delete"] = sum(((timestamp - self->querystart)/1000000));}tick-30s{        printa(@statements);}

Сценарий, только показанный агрегаты, времена потратили выполнение каждой работы, которая могла использоваться, чтобы помочь протестировать стандартного комплекта в сравнении с эталоном тестов.

 delete                                                            0  update                                                            0  insert                                                           23  select                                                         2484  delete                                                            0  update                                                            0  insert                                                           39  select                                                        10744  delete                                                            0  update                                                           26  insert                                                           56  select                                                        10944  delete                                                            0  update                                                           26  insert                                                         2287select                                                        15985