• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 1. MySQL Server
    2. MySQL Server 로그
    3. 하나의 시스템에서 여러 MySQL 인스턴스 실행
    4. DTrace를 사용하여 mysqld 추적
    1. mysqld DTrace 프로브 설명
    1. 연결 프로브
    2. 명령 프로브
    3. 쿼리 프로브
    4. 쿼리 분석 프로브
    5. 쿼리 캐시 프로브
    6. 쿼리 실행 프로브
    7. 행 레벨 프로브
    8. 행 읽기 프로브
    9. 인덱스 프로브
    10. 잠금 프로브
    11. 파일 정렬 프로브
    12. 명령문 프로브
    13. 네트워크 프로브
    14. Keycache 프로브
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

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


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved