2017-09-23 7 views
2

나는 oracle-10046-aka를 가지고 있습니다. 이 구조와 유사 sqltrace-파일 :: 코드가 인스트루먼트되지 않은 경우 SQL 실행 세트를 그룹화하려면 어떻게해야합니까?

Oracle Release 11.2 
PARSING IN CURSOR #1 len=20 dep=0 uid=7 oct=6 lid=7 tim=2 hv=1 ad='1' sqlid='A' 
insert 
END OF STMT 
PARSING IN CURSOR #2 len=20 dep=0 uid=7 oct=6 lid=7 tim=2 hv=2 ad='2' sqlid='r' 
update next_step 
END OF STMT 
PARSING IN CURSOR #3 len=20 dep=0 uid=7 oct=6 lid=7 tim=2 hv=3 ad='3' sqlid='B' 
update complete 
END OF STMT 
PARSING IN CURSOR #4 len=20 dep=0 uid=7 oct=3 lid=7 tim=2 hv=4 ad='4' sqlid='X' 
select X 
END OF STMT 
PARSING IN CURSOR #5 len=20 dep=0 uid=7 oct=3 lid=7 tim=2 hv=5 ad='5' sqlid='Y' 
select Y 
END OF STMT 

EXEC#1:c=1,e=1,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=3,tim=100 
EXEC#2:c=2,e=2,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=3,tim=200 
EXEC#3:c=4,e=4,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=3,tim=300 

EXEC#4:c=5,e=5,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=3,tim=310 
EXEC#5:c=6,e=6,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=3,tim=320 

EXEC#1:c=8,e=8,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=3,tim=400 
EXEC#2:c=16,e=16,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=3,tim=416 
EXEC#3:c=32,e=32,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=3,tim=448 

나는 그것이 끝이다으로 특정 순서의 시작, 그리고 SQLID 'B'로 SQLID 'A'를 확인했다. 그 사이에 예제에서 sqlid 'r'만 있지만 훨씬 더 많을 수도 있고 심지어 동일한 SQL 또는 SQL 시퀀스가 ​​아닐 수도 있습니다. sqlid 'X'및 'Y'와 같은 다른 SQL은 관심있는 시퀀스 내에 있지 않으므로 표시되어야합니다.

내 도구는 methodr의 Method R Tools 제품에서 mrskew입니다. Perl 코드로 확장 할 수 있기 때문에이 작업을 수행 할 수 있지만 Perl 기술은 mrskew 내부를 이해하는 데있어 제한적입니다.

매우 유용한 정보 또는 도움을 주셔서 감사합니다.

답변

3

테스트 데이터 martin1.trc를 사용하여 rc 파일 martin1.rc를 만들었습니다.

--init=' 
    my $xfrm_id; 
    sub xfrm { 
     $xfrm_id = $exec_id if ($sqlid//"") eq "A"; 
     return $xfrm_id//$exec_id; 
    } 
' 
--group='xfrm()' 

은 그 때 나는 mrskew --rc martin1.rc martin1.trc 실행하고 나는이 출력을 가지고 :

'xfrm()' DURATION  % CALLS  MEAN  MIN  MAX 
--------- -------- ------ ----- -------- -------- -------- 
     25 0.000056 75.7%  3 0.000019 0.000008 0.000032 
     18 0.000018 24.3%  5 0.000004 0.000001 0.000006 
--------- -------- ------ ----- -------- -------- -------- 
TOTAL (2) 0.000074 100.0%  8 0.000009 0.000001 0.000032 

이 보고서는 흥미 트랜잭션이 실행을 보여줍니다. 가장 흥미로운 (가장 큰 응답 시간) 트랜잭션 실행은 추적 파일 행 25에서 시작하여 총 응답 시간에 3 dbcalls 동안 0.000056 초 (전체의 75.7 %)를 기여했습니다. 가장 흥미로운 다른 실행은 18 행에서 시작되었고 나머지 24.3 %는 전체에 기여했습니다. 우리는 22-23 행이 흥미롭지 않지만 간단한 방법은 그것들을 구별하지 않는다는 것을 압니다. 그래서 18 행에서 시작하는 실행에 0.000007 초 동안 3 dbcalls 대신 0.000018 초 동안 5 dbcalls이 있다는 보고서가 나온 이유입니다.

우리가 크게 변환 기능을 변경하는 경우 우리는 B가 다른 B의 dbcalls (예를 들어, FETCH) 여기 martin2.rc입니다 뒤에 EXEC 경우에도 문 B (에서 끝나는 트랜잭션을 처리 할 수 ​​있습니다.

--init=' 
    my $sawB; 
    my $xfrm_id; 
    sub xfrm { 
     if (($sqlid//"") eq "A") { 
      $xfrm_id = $exec_id; # global scope maintains state 
     } else { 
      if (($sqlid//"") eq "B") { 
       $sawB = 1; 
      } else { 
       if ($sawB) { 
        $sawB = undef; 
        $xfrm_id = undef; 
       } 
      } 
     } 
     return $xfrm_id//0; 
    } 
' 
--group='xfrm()' 

프로필 개념 (총계가 전체 경험의 합계를 나타냄)을 유지하면서 모든 비 재미있는 트랜잭션 dbcalls를 파일에 표시 할 수없는 행 번호 인 0으로 변환하기로 결정했습니다. 재미있는 거래가 전체 경험에서 어떻게 평가되는지를 알 수 있습니다.

$ mrskew --rc martin2.rc martin1.trc 

'xfrm()' DURATION  % CALLS  MEAN  MIN  MAX 
--------- -------- ------ ----- -------- -------- -------- 
     25 0.000056 75.7%  3 0.000019 0.000008 0.000032 
     0 0.000011 14.9%  2 0.000005 0.000005 0.000006 
     18 0.000007 9.5%  3 0.000002 0.000001 0.000004 
--------- -------- ------ ----- -------- -------- -------- 
TOTAL (3) 0.000074 100.0%  8 0.000009 0.000001 0.000032 
,210

내가 라인 (20)을 (4 μsecs 소요되는) 중복 된 경우, 출력은 말한다 :

'xfrm()' DURATION  % CALLS  MEAN  MIN  MAX 
--------- -------- ------ ----- -------- -------- -------- 
     26 0.000056 71.8%  3 0.000019 0.000008 0.000032 
     18 0.000011 14.1%  4 0.000003 0.000001 0.000004 
     0 0.000011 14.1%  2 0.000005 0.000005 0.000006 
--------- -------- ------ ----- -------- -------- -------- 
TOTAL (3) 0.000078 100.0%  9 0.000009 0.000001 0.000032 

당신은 흥미로운 트랜잭션이 라인 (18)에 시작하는 것을 볼 수 해주기 4 dbcalls 이상 11 μsecs에 기여 할 수 있습니다. 이것은 martin2.rc의 적합성을 확인하는보다 완전한 테스트 인 것 같습니다.

마지막 보고서에서 재미있는 트랜잭션이 파일의 총 응답 시간의 71.8 % + 14.1 % = 85.9 %를 차지한다는 것을 알 수 있습니다. 변환 기능 (독자에게 남은 운동)을 추가로 수정하면 내가했던 것보다는 "재미있는 것"과 "재미 있지 않은 것"으로 모을 수 있습니다. 이것은 두 가지 비율을 더하는 것입니다.

+0

제프, 고마워요. 내가 찾던 바로 그거야. 내 사양이 100 % 명확하지 않으므로 독자가 왼쪽으로 말하면 모든 수정 사항을 볼 수 있습니다 ._ –

관련 문제