5.4.1.3 쿼리 프로브
query-start
및 query-done
프로브는 특정 쿼리가 서버에 의해 수신 된 쿼리가 실행되고 정보가 클라이언트에 성공적으로 전송 된 때 트리거됩니다.
query-start (query, connectionid, database, user host) query-done (status)
query-start
: 클라이언트에서 쿼리 문자열을받은 후에 트리거됩니다. 인수는 다음과 같습니다.query
: 전송 된 쿼리의 전체 텍스트.connectionid
: 쿼리를 보낸 클라이언트의 연결 ID. 이 연결 ID는 클라이언트가 처음 연결했을 때 반환되는 연결 ID와SHOW PROCESSLIST
의 출력Id
값과 동일합니다.database
: 쿼리가 실행되는 데이터베이스의 이름.user
: 서버에 연결하는 데 사용되는 사용자 이름입니다.host
: 클라이언트의 호스트 이름입니다.
query-done
: 쿼리가 실행되는 클라이언트에 정보를 반환 할 때 트리거됩니다. 이 프로브는 단일 인수status
를 저장하고 쿼리가 성공적으로 실행되면 0을 반환하고 오류가 발생한 경우 1을 반환합니다.
다음의 D 스크립트를 사용하여 각 쿼리의 실행 시간에 대한 간단한 리포트를 얻을 수 있습니다.
#! / usr / sbin / dtrace -s #pragma D option quiet dtrace ::: BEGIN { printf ( "% - 20s % -20s % -40s % -9s \ n", "Who", "Database", "Query", "Time (ms)"); } mysql * ::: query-start { self-> query = copyinstr (arg0); self-> connid = arg1; self-> db = copyinstr (arg2); self-> who = strjoin (copyinstr (arg3) strjoin ( "@", copyinstr (arg4))); self-> querystart = timestamp; } mysql * ::: query-done { printf ( "% - 20s % -20s % -40s % -9d \ n", self-> who, self-> db, self-> query, (timestamp - self-> querystart) / 1000000); }
위의 스크립트를 실행하면 쿼리 실행 시간에 대한 기본적인 개요를 이해할 수 있습니다.
shell> ./query.d Who Database Query Time (ms) root @ localhost test select * from t1 order by i limit 10 0 root @ localhost test set global query_cache_size = 0 0 root @ localhost test select * from t1 order by i limit 10 776 root @ localhost test select * from t1 order by i limit 10 773 root @ localhost test select * from t1 order by i desc limit 10 795