Spec-Zone .ru
спецификации, руководства, описания, API
|
Отдельные зонды оператора обеспечиваются, чтобы дать определенную информацию о различных типах оператора.
Поскольку зонды запуска строка запроса обеспечиваются как единственный параметр. В зависимости от типа оператора
будет отличаться информация, предоставленная соответствующим сделанным зондом. Для всех сделанных зондов
состояние работы (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)
select-start
: Инициированный прежде a SELECT
оператор.
select-done
: Инициированный в конце a SELECT
оператор.
insert-start
: Инициированный прежде a INSERT
оператор.
insert-done
: Инициированный в конце INSERT
оператор.
insert-select-start
: Инициированный перед INSERT
... SELECT
оператор.
insert-select-done
: Инициированный в конце INSERT
... SELECT
оператор.
update-start
: Инициированный перед UPDATE
оператор.
update-done
: Инициированный в конце UPDATE
оператор.
multi-update-start
: Инициированный перед UPDATE
оператор, включающий многократные таблицы.
multi-update-done
: Инициированный в конце UPDATE
оператор, включающий многократные таблицы.
delete-start
: Инициированный прежде a DELETE
оператор.
delete-done
: Инициированный в конце a DELETE
оператор.
multi-delete-start
: Инициированный прежде a DELETE
оператор, включающий многократные таблицы.
multi-delete-done
: Инициированный в конце a DELETE
оператор, включающий многократные таблицы.
Параметры за зонды оператора:
query
: Строка запроса.
status
: Состояние запроса. 0
для успеха, и >0
для отказа.
rows
: На число строк влияет оператор. Это возвращает
строки числа, найденные для SELECT
, число строк, удаленных для DELETE
, и число строк, успешно вставленных для INSERT
.
rowsmatched
: Число строк, соответствующих WHERE
пункт UPDATE
работа.
rowschanged
: Число строк, фактически измененных во
время UPDATE
работа.
Вы используете эти зонды, чтобы контролировать выполнение этих типов оператора, не имея необходимость контролировать пользователя или клиент, выполняющий операторы. Простой пример этого должен отследить времена выполнения:
#!/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