5.4.1.11 파일 정렬 프로브
파일 정렬 조사가 파일 정렬 조작이 테이블에 적용 될 때마다 트리거됩니다. 파일 정렬과 그것이 발생하는 조건에 대한 자세한 내용은 섹션 8.2.1.15 "ORDER BY 최적화" 를 참조하십시오.
filesort-start (database, table) filesort-done (status, rows)
filesort-start
: 테이블에서 파일 정렬 작업을 시작했을 때 트리거됩니다. 프로브에 대한 2 개의 인수 인database
와table
정렬되는 테이블을 식별합니다.filesort-done
: 파일 정렬 작업이 완료되면 트리거됩니다. 2 개의 인수가 제공되며 이들은status
(성공이면 0, 실패의 경우는 1) 및 파일 정렬 과정에서 정렬 된 행 수입니다.
다음 스크립트는이 예를 나타내는 것으로, 메인 쿼리의 기간 이외에 파일 정렬 처리 기간을 추적합니다.
#! / usr / sbin / dtrace -s #pragma D option quiet dtrace ::: BEGIN { printf ( "% - 2s % -10s % -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-> filesort = 0; self-> fsdb = ""; self-> fstable = ""; } mysql * ::: filesort-start { self-> filesort = timestamp; self-> fsdb = copyinstr (arg0); self-> fstable = copyinstr (arg1); } mysql * ::: filesort-done { this-> elapsed = (timestamp - self-> filesort) / 1000; printf ( "% 2d % -10s % -10s % 9d % 18d Filesort on % s \ n", arg0, self-> who, self-> fsdb, self-> connid, this-> elapsed, self-> fstable); } mysql * ::: query-done { this-> elapsed = (timestamp - self-> querystart) / 1000; printf ( "% 2d % -10s % -10s % 9d % 18d % s \ n", arg0, self-> who, self-> db, self-> connid, this-> elapsed, self-> query); }
파일 정렬을 트리거하는 ORDER BY
절이있는 쿼리를 큰 테이블에서 실행 한 다음 테이블에 인덱스를 만들어 동일한 쿼리를 반복하여 실행 속도의 차이를 확인 할 수 있습니다.
St Who DB ConnID Dur microsec Query 0 @localhost test 14 11335469 Filesort on t1 0 @localhost test 14 11335787 select * from t1 order by i limit 100 0 @localhost test 14 466734378 create index t1a on t1 (i) 0 @localhost test 14 26472 select * from t1 order by i limit 100