2010-05-27 2 views
4

저는 DBMS_PROFILER를 처음 사용합니다. 필자가 본 모든 예제는 프로파일 러의 사용법을 보여주기 위해 간단한 최상위 절차를 사용하고 모든 줄 번호를 얻습니다. 패키지의 모든 코드를 배포하고 프로필 세션을 채우는 데 큰 어려움을 겪고 있습니다. 유용한 데이터가있는 plsql_profiler_units. 내 실행의 대부분은 다음과 같이 :Oracle DBMS_PROFILER는 결과 테이블에 익명만을 표시합니다.

RUNID RUN_COMMENT UNIT_OWNER UNIT_NAME   SECS PERCEN 
----- ----------- ----------- -------------- ------- ------ 
5  Test  <anonymous> <anonymous>  .00 2.1 
     Profiler 

5  Test  <anonymous> <anonymous>  .00 2.1 
     Profiler 

5  Test  <anonymous> <anonymous>  .00 2.1 
     Profiler 

난 그냥 모든 예에 따라, dbms_profiler.start_profiler, flush_data 및 stop_profiler에 대한 호출을 포함했다. 주요 차이점은 내 코드가 패키지에 있고 다른 패키지를 호출한다는 것입니다. 호출 스택의 모든 단일 저장 프로 시저를 프로파일해야합니까? 그렇다면이 도구는 쓸모가 없습니다!

다른 유사한 사이트들 중에서도 힌트는 http://www.dba-oracle.com/t_plsql_dbms_profiler.htm입니다.

+0

무엇 데이터베이스 버전


나는이 시도? 최적화 컴파일러가 코드 인라이닝 (inlining code)과 같은 작업을 수행하는 경우 재구성 된 최적화 코드의 측정을 원래 소스와 조정할 수 없게 될 수도 있습니다. –

+0

It 's Oracle 10.2g –

답변

4

plsql_profiler_units에서 데이터를 검색하는 쿼리에 문제가 없다고 확신합니까?

Create Procedure sub_procedure As 
Begin 
    dbms_output.put_line('test'); 
End; 

Create Package test_package As 
    Procedure test; 
End; 

Create Package Body test_package As 
    Procedure test As Begin 
    For i In 1 .. 10 Loop 
     If(i<=5) Then 
     sub_procedure; 
     End If; 
    End Loop; 
    End; 
End; 

Begin 
    DBMS_PROFILER.start_profiler(SYSDATE); 
    test_package.test; 
    DBMS_PROFILER.stop_profiler; 
End; 

이 간단한 쿼리

Select uni.unit_name, dat.line#, dat.total_occur 
    From plsql_profiler_data dat 
    Join plsql_profiler_units uni On ( uni.runid = dat.runid 
            And uni.unit_number = dat.unit_number) 

또한 나에게 예상 된 결과를 보여주는를 제공 패키지 및 절차 :

<anonymous> 1 0 
<anonymous> 2 0 
<anonymous> 3 2 
<anonymous> 4 1 
<anonymous> 5 0 
TEST_PACKAGE 2 0 
TEST_PACKAGE 3 11 
TEST_PACKAGE 4 5 
TEST_PACKAGE 5 6 
TEST_PACKAGE 8 1 
SUB_PROCEDURE 1 0 
SUB_PROCEDURE 3 5 
SUB_PROCEDURE 4 5 
+0

고마워요 - 당신의 예를 돌렸고 괜찮 았어. 그런 다음 SQL * Developer에서 문제를 일으키는 패키지를 다시 작성하고 OK라는 프로파일을 얻은 것으로 보입니다. 내가 생각한 한 가지는 내 의견이 내 첫 번째 테스트에서 독특하지 않다는 것입니다. 타임 스탬프를 추가하는 것이 좋은 방법 인 것처럼 보입니다. –

+0

저장 프로 시저가 응용 프로그램에 의해 호출 될 때도 동일한 문제가 발생하지만 SQL * Developer에서 호출하면 OK입니다. 응용 프로그램은 SQL * Developer에서 일반적으로 사용하는 것과 다른 사용자로 연결됩니다. 제대로 작동하려면 필요한 권한이 있습니까? –

+0

@ 그렉 레이놀즈 : 고유 할 필요는 없습니다. 'run_comment' 매개 변수는'plsql_profiler_runs.run_comment'에 저장되어 다른 호출을 구별하는 데 도움이됩니다. 애플리케이션과 동일한 사용자를 사용하여 * SQL * Developer *에 연결하여 보조금이 누락되었는지 확인하십시오. –

관련 문제