5.4.1.7 행 레벨 프로브
*row-{start,done}
프로브는 행 조작이 스토리지 엔진에 푸시 다운 될 때마다 트리거됩니다. 예를 들어, 100 행의 데이터에 대해 INSERT
문을 실행할 때, 각각의 행 삽입에 insert-row-start
및 insert-row-done
프로브가 모두 100 회 트리거됩니다.
insert-row-start (database, table) insert-row-done (status) update-row-start (database, table) update-row-done (status) delete-row-start (database, table) delete-row-done (status)
insert-row-start
: 행이 테이블에 삽입되기 전에 트리거됩니다.insert-row-done
: 행이 테이블에 삽입 된 후 트리거됩니다.update-row-start
: 행이 테이블에서 업데이트되기 전에 트리거됩니다.update-row-done
: 행이 테이블에서 업데이트되기 전에 트리거됩니다.delete-row-start
: 행이 테이블에서 제거되기 전에 트리거됩니다.delete-row-done
: 행이 테이블에서 제거되기 전에 트리거됩니다.
프로브에 의해 지원되는 인수는 각각의 경우에 해당하는 start
와 done
프로브와 일관성이 있습니다.
database
: 데이터베이스 이름.table
: 테이블 이름.status
: 상태에서 정상적인 경우 0, 실패라면 1.
행 수준의 프로브는 개별 행 액세스에 대해 트리거되기 때문에 이러한 프로브는 초당 수천 번 트리거 될 가능성이 있고, 모니터링 스크립트 및 MySQL 모두에 해로운 영향을 미칠 수 있습니다. DTrace 환경에서는 성능에 악영향을 방지하기 위해 이러한 프로브의 트리거를 제한하도록하십시오. 프로브의 사용을 자제하거나 이러한 프로브를보고하기위한 카운터 함수 또는 집계 함수를 사용하여 스크립트가 종료 한 때 또는 query-done
또는 query-exec-done
프로브의 일부로 요약 제공하도록하십시오.
다음 예제 스크립트는 대규모 쿼리에서 각 행 작업 기간을 요약합니다.
#! / usr / sbin / dtrace -s #pragma D option quiet dtrace ::: BEGIN { printf ( "% - 2s % -10s % -10s % 9s % 9s % -s \ n" "St", "Who", "DB", "ConnID", "Dur ms", "Query"); } mysql * ::: query-start { self-> query = copyinstr (arg0); self-> who = strjoin (copyinstr (arg3) strjoin ( "@", copyinstr (arg4))); self-> db = copyinstr (arg2); self-> connid = arg1; self-> querystart = timestamp; self-> rowdur = 0; } mysql * ::: query-done { this-> elapsed = (timestamp - self-> querystart) / 1000000; printf ( "% 2d % -10s % -10s % 9d % 9d % s \ n", arg0, self-> who, self-> db, self-> connid, this-> elapsed, self-> query); } mysql * ::: query-done / self-> rowdur / { printf ( "% 34s % 9d % s \ n", "", (self-> rowdur / 1000000) "-> Row ops"); } mysql * ::: insert-row-start { self-> rowstart = timestamp; } mysql * ::: delete-row-start { self-> rowstart = timestamp; } mysql * ::: update-row-start { self-> rowstart = timestamp; } mysql * ::: insert-row-done { self-> rowdur + = (timestamp-self-> rowstart); } mysql * ::: delete-row-done { self-> rowdur + = (timestamp-self-> rowstart); } mysql * ::: update-row-done { self-> rowdur + = (timestamp-self-> rowstart); }
데이터를 테이블에 삽입하는 쿼리와 함께 위의 스크립트를 실행하면 생의 행 삽입을 실행하는 데 걸린 정확한 시간을 모니터 할 수 있습니다.
St Who DB ConnID Dur ms Query 0 @localhost test 13 20767 insert into t1 (select * from t2) 4827 -> Row ops