5.4.1.13 네트워크 프로브
네트워크 프로브는 MySQL Server 및 모든 유형의 클라이언트에서 네트워크를 통해 정보의 전송을 모니터합니다. 프로브는 다음과 같이 정의됩니다.
net-read-start () net-read-done (status, bytes) net-write-start (bytes) net-write-done (status)
net-read-start
: 네트워크 읽기 작업이 시작되었을 때 트리거됩니다.net-read-done
: 네트워크 읽기 작업이 완료 될 때 트리거됩니다.status
는 작업의 반환 상태를 나타내는integer
에서 성공하면0
, 실패했을 경우는1
입니다.bytes
인수는 과정에서 읽은 바이트 수를 지정하는 정수입니다.net-start-bytes
: 데이터가 네트워크 소켓에 쓸 때 트리거됩니다. 단일 인수bytes
네트워크 소켓에 기입 해지는 바이트 수를 지정합니다.net-write-done
: 네트워크 쓰기 작업이 완료 될 때 트리거됩니다. 단일 인수status
는 작업의 반환 상태를 나타내는 정수 성공한 경우0
에서 실패한 경우는1
입니다.
네트워크 프로브를 사용하여 실행중인 네트워크 클라이언트에서 읽기 및 네트워크 클라이언트에 기록하는 데 걸린 시간을 모니터 할 수 있습니다. 다음의 D 스크립트 예제를 보여줍니다. 읽기 또는 쓰기 누적 시간과 바이트 수가 계산됩니다. 네트워크를 읽거나 쓰기 위해 개별 프로브가 급격히 시작되는 것에 대처하기 위해 동적 변수 크기 ( dynvarsize
옵션을 사용하여) 증가되는 점에 유의하십시오.
#! / usr / sbin / dtrace -s #pragma D option quiet #pragma D option dynvarsize = 4m dtrace ::: BEGIN { printf ( "% - 2s % -30s % -10s % 9s % 18s % -s \ n" "St", "Who", "DB", "ConnID", "Dur microsec", "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-> netwrite = 0; self-> netwritecum = 0; self-> netwritebase = 0; self-> netread = 0; self-> netreadcum = 0; self-> netreadbase = 0; } mysql * ::: net-write-start { self-> netwrite + = arg0; self-> netwritebase = timestamp; } mysql * ::: net-write-done { self-> netwritecum + = (timestamp - self-> netwritebase); self-> netwritebase = 0; } mysql * ::: net-read-start { self-> netreadbase = timestamp; } mysql * ::: net-read-done { self-> netread + = arg1; self-> netreadcum + = (timestamp - self-> netreadbase); self-> netreadbase = 0; } mysql * ::: query-done { this-> elapsed = (timestamp - self-> querystart) / 1000000; printf ( "% 2d % -30s % -10s % 9d % 18d % s \ n", arg0, self-> who, self-> db, self-> connid, this-> elapsed, self-> query); printf ( "Net read : % d bytes (% d ms) write : % d bytes (% d ms) \ n" self-> netread (self-> netreadcum / 1000000) self-> netwrite (self-> netwritecum / 1000000)); }
원격 클라이언트가있는 컴퓨터에서 위의 스크립트를 실행하면 쿼리 실행 시간의 약 3 분의 1이 클라이언트에 다시 쿼리 결과를 기록 할 관련있는 것으로 이해할 수 있습니다.
St Who DB ConnID Dur microsec Query 0 root @ :: ffff : 192.168.0.108 test 31 3495 select * from t1 limit 1000000 Net read : 0 bytes (0 ms) write : 10000075 bytes (1220 ms)