좋은 방법으로, 트레이스(tracea)를 떠 보는게 좋겠습니다.
DBA아니시죠? 혹 sys나 system 유저로 DB접속이 가능하신가요?
아님 좀 곤란할 수 있습니다.
1. plustrace role이 있어야 합니다.
->sys유저로 로긴 후, $ORACLE_HOME/sqlplus/admin/plustrace.sql를 수행
2. plustrace롤을 가져야합니다.
->sys로 로긴 후, grant plustrace to USER명;
3. plan_table이 생성되어 있어야 합니다.
->USER로 로긴 후, $ORACLE_HOME/rdbms/admin/utlxplan.sql 수행
위의 1,2,3번은 되어있을 수 있습니다. 미리 확인해보세요.
확인은,
2번만 하심 되지 않을까 싶네요.
SQL>select * from user_role_privs; 하심 되겠습니다. 여기서 plustrace롤이 있는지 눈으로 확인하심 되겠죠?
아마 plustrace롤이 있다고 하면 1,2번은 최소한 되어있는 걸겁니다.
3번은 일단 함 돌려보세요 ^^
아..아님 님의 유저로 로긴 후,
SQL>select * from user_tables where table_name = 'PLAN_TABLE';
해보세요.

이제 진짜 trace를 떠야합니다.
sql*plus로 로긴하세요.
먼저 sys로 로긴하세요. 만약 sys로 로긴안된다면, USER(님의 유저)로 로긴한 다음,
#>sqlplus USER/USER@Connect_String
SQL>conn /as sysdba 해보세요.
1. show parameter timed
2. show parameter sql_trace
둘 다 true라는 값으로 나오야 합니다.
만약 이게 false라면
SQL>alter session set timed_statistics=true;
SQL>alter session set sql_trace=true;
로 설정해서 님의 현재 세션에서만 적용되도록 할 수 있습니다.
3. sql*plus로 로긴(님의 유저로)
4. set autot on -> set autotrace on의 약어입니다.
5. 이제 원하는 쿼리를 돌리세요.

그럼 결과가 나옵니다.

Execution Plan (참고로 아래에 왼쪽나온 숫자는 실행된 순서입니다)
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 NESTED LOOPS
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'XX'
3 2 INDEX (RANGE SCAN) OF 'XXXXX' (UNIQUE)
4 1 TABLE ACCESS (BY INDEX ROWID) OF 'XXXXX'
5 4 INDEX (UNIQUE SCAN) OF 'XXXXX' (UNIQUE)

Statistics
----------------------------------------------------------
7 recursive calls
0 db block gets
6 consistent gets
0 physical reads
0 redo size
692 bytes sent via SQL*Net to client
655 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
뭐 대략 이런 결과가 나옵니다.
그런데 정확하게 시간이 나오지 않습니다.
그래서
SQL>execute dbms_session.set_sql_trace(true);
애를 실행해줍니다.
이제 쿼리를 돌리세요.
결과는..
SQL>show parameter user
해보시면 user dump destnation이란게 나옵니다.
아니면 대부분, $ORACLE_BASE/admin/SID/udump 라는 곳에 있습니다.
여기서 #ls -altr 이라고 하시면 가장 최근 파일이 젤 밑에 보이죠?
(참고로 지금 다 유닉스입니다. Windows면..대충 비슷하게 하실 수 있겠죠? ^^)
#tkprof 가장밑에있는파일명 원하는파일명
해주시면 보기 편한 모양으로 '원하는파일명'으로 만들어집니다. 물론 text파일이죠.

결과는 대략 아래와 같습니다.


call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 0 0.00 0.00 0 0 0
중략...

여기서 elapsed라는 시간이 바로 총 걸린 시간입니다.
일단 시간이 젤 많이 걸린 놈부터 왜 그런지 찾아들어가 보다보면
좋은 결과 있을겁니다. ^^

출처 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10205&docId=68367276&qb=b3JhY2xlIOy/vOumrCDsiJjtlokg7Iuc6rCE&enc=utf8&section=kin&rank=3&sort=0&spq=0&pid=gZH9Zdoi5TCssvIdbalsss--232028&sid=TE59Eb92TkwAAD6QCpY

+ Recent posts