TKPROF가 old fashion인가요?
interlee 수험생

답변 채택시 : 0코아

답변 2 추천 0 조회 789 2017.05.02

미국에서 데이터웨어하우징 관련 일하고 있습니다.


오라클 데이터베이스 관리자에게 TOAD를 통해 TKPROF를 사용할 수 있도록 트레이스 파일을 디렉토리 접근을 가능하게 해줄 수 있냐고 하니, TKPROF는 이미 오래된 구닥다리라고 하면서 다른 대안을 마련해 줄테니 기다리라고 하네요.  


개발자입장에서 잠시만 트레이스를 걸겠다고 이야기를 해도, 관리자 편에서는 트레이스파일이 너무 엄청 쌓일 것 같아서 걱정하는 것도 이해는 되기도 하고요. 

TKPROF말고 더 좋은 대안이 생겼나요? 제가 요즘 흐름을 잘 몰라서요...


감사...



댓글 (0)
목록 답변등록
TKPROF가 old fashion인가요?
interlee 2017.05.13

JHCHOI님 친절한 답변 감사드립니다. 알려주신데로 따라하니 원하는 정보 (특히 실제 접근한 로우 수)를 쉽게 보게되었습니다!!

다른 분들이 참고하시도록 예를 올립니다.


SELECT /*+ gather_plan_statistics */ /* FIND_ME_A */ f.*

  FROM faculty_detail f,

       (    

        -- 아래 인라인뷰의 결과: '1015350', '1002958', '1044200', '1056312'

        SELECT emplid

          FROM ad_faculty_detail

         GROUP BY emplid, nw_parent_deptid

        HAVING COUNT(*) > 1       

       ) d       

 WHERE 1=1

   AND f.emplid = d.emplid

;


SELECT sql_id, sql_fulltext

  FROM v$sql

 WHERE sql_text LIKE '%FIND_ME_A%'

   AND sql_text NOT LIKE '%sql_fulltext%';

-- SQL_ID returned: 4ap15a56f5q7h


SELECT  *

  FROM TABLE (DBMS_XPLAN.DISPLAY_CURSOR('4ap15a56f5q7h',NULL,'ALLSTATS')); 


 dbms_xplan.png

댓글 (1)
TKPROF가 old fashion인가요?
jhchoi 2017.05.11

질문자로부터 답변이 채택 되었습니다.

오라클이 오래전부터 제공해오던 10046 Event Trace 를 이용하기 위해서는 Trace 파일이 저장되어 있는 디렉토리에 접근하여 TKPROF 로 변환하고 FTP로 변환된 파일을 다운로드해야하고... DB계정의 권한 뿐 아니라 OS 계정에 대한 권한도 부여받아야 하기 때문에 DBA들이 쉽게 권한을 주려 하지 않습니다. 

Oracle 10g 부터 제공되는 DBMS_XPLAN 패키지를 이용하면 이러한 불편없이 몇가지 Dictionary View 에 대한 접근 권한만 부여받아서 Trace 를 추출할 수 있어 요즘은 10046 Event Trace 를 잘 사용하지 않습니다.


하지만 두가지 Trace 방법간에는 장단점이 있습니다.

10046 Event Trace 는 단일 SQL 레벨, 세션 레벨, DB Instance 레벨에서 Trace 를 추출할 수 있지만 DBMS_XPLAN 은 단일 SQL 레벨에서 Trace 가 가능하고, SQL 내에서 사용되는 사용자정의함수가 있는 경우 10046 Event Trace 는 해당 함수 내에서 수행된 SQL 까지도 모두 추출이 되지만 DBMS_XPLAN 은 그것이 불가능하다는 점입니다.

하지만 DBMS_XPLAN 패키지를 이용하면 Predicate 정보와 같은 다양한 정보를 제공받을 수 있어 SQL 성능의 문제를 빠르게 파악하기 쉽습니다.

그래서 배치 튜닝 같은 작업이나 사용자정의함수를 많이 사용하고 있는 SQL의 튜닝이 아니라면 굳이 10046 Event Trace 를 사용할 필요가 없이 DBMS_XPLAN 패키지를 이용하는 것이 더 좋을 듯 합니다.

댓글 (0)