5.4.1.12 명령문 프로브
개별 문 프로브는 다양한 문 유형에 대한 특정 정보를 부여하기 위해 제공됩니다. start 프로브의 경우 쿼리 문자열 만 인수로 제공됩니다. 문 유형에 따라 해당 done 프로브에서 제공하는 정보는 다릅니다. 모든 done 프로브 작업의 상태 (성공하면 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
:SELECT
문 앞에 트리거됩니다.select-done
:SELECT
문이 끝날 때 트리거됩니다.insert-start
: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
:DELETE
문 앞에 트리거됩니다.delete-done
:DELETE
문이 끝날 때 트리거됩니다.multi-delete-start
: 여러 테이블을 수반하는DELETE
문 앞에 트리거됩니다.multi-delete-done
: 여러 테이블을 수반하는DELETE
문이 끝날 때 트리거됩니다.
문 프로브의 인수는 다음과 같습니다.
query
: 쿼리 문자열.status
: 쿼리 상태입니다. 성공의 경우는0
, 실패의 경우는>0
.rows
: 문에 의해 영향을받은 행 수. 이것은SELECT
에 대해 발견 된 행수,DELETE
대해 삭제 된 행 수와INSERT
대해 올바르게 삽입 된 행 수를 반환합니다.rowsmatched
:UPDATE
조작의WHERE
절에 의해 일치하는 행.rowschanged
:UPDATE
조작 중에 실제로 변경된 행 수.
이 프로브를 사용하여 문을 실행하는 사용자 또는 클라이언트를 모니터하지 않고 이러한 문 유형의 실행을 모니터합니다. 이 간단한 예제는 실행 시간을 추적하는 것입니다.
#! / usr / sbin / dtrace -s #pragma D option quiet dtrace ::: 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 0 insert into t2 (select * from t2) 0 275 9 update t2 set i = 5 where i> 75 110 110 8 update t2 set i = 5 where i <25 254 134 12 delete from t2 where i <5 0 0 0
다른 방법으로, DTrace 집계 함수를 사용하여 개별 명령문의 실행 시간을 계산하는 방법이 있습니다.
#! / usr / sbin / dtrace -s #pragma D option quiet 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-> 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 2287 select 15985