database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 9251 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 9251
SQL TRACE FACILITY 를 사용하여 APPLICATION TUNING 하는 방법
작성자
정재익(advance)
작성일
2002-01-05 14:59
조회수
5,896

SQL TRACE FACILITY 를 사용하여 APPLICATION TUNING 하는 방법

 

SQL TRACE FACILITY 는 SQL 문 사용에대한 성능을 분석하기위해서 사용된다. 이러한 SQL TRACE FACILITY 를 이용하면  각 SQL 문에 대해서 다음과 같은 정보를 얻을수 있다.      

  . parse,execute,fetch count     
  . CPU 와 elapsed 시간     
  . physical reads 와 logical reads     
  . 처리된 row 의 수 

SQL TRACE FACILITY 는 SESSION 혹은 INSTANCE 단위로 할 수 있고 TRACE 결과 화일은 tkprof UTILITY  에의해 사용자가 읽을수 있는 형태로 변환시킨다.    

        

SQL TRACE SET UP 하여 사용하는방법

[b]1. SQL TRACE enable 및 TRACE 화일 디렉토리 지정[/b]
  < INSTANCE 단위 >       
    ?/dbs/initSID.ora  화일에 다음 두개의 PARAMETER 를 추가하고 DATABASE 를      
    다시 STARTUP 시킨다.      
            sql_trace = true     
            timed_statistics = true      
    timed_statistics 은 시스템에 많은 LOAD 가 걸리므로 사용하지 않는것이 좋다.     
  < SESSION 단위 >     
    SQL*PLUS      
          $ sqlplus scott/tiger     
          SQL > ALTER SESSION SET SQL_TRACE = TRUE;     

    SQLFORMS30, RUNFORM30 : -s OPTION 사용         
          $ runform30 -s frmfile scott/tiger -c vt220         

    PRO*C     
          EXEC SQL CONNECT :username;     
          EXEC SQL ALTER SESSION SET SQL_TRACE = TRUE;     

   TRACE FILE 디렉토리는  initSID.ora 화일에 다음과같이 지정하고     
   지정하지않으면 ?/rdbms/log 디렉토리에 생긴다.     
       user_dump_dest = /user/dump     

[b]2. SQL 문 실행[/b]

   TRACE 화일은 SESSION 단위로 1 개씩 생김으로 한 SESSION 에서 사용된 모든 SQL 문의   
     TRACE 결과는 1개의 화일에 존재하게된다.     

   예. SQL> ALTER SESSION SET  SQL_TRACE = TRUE;     
       SQL> SELECT COUNT(*) FROM EMP E,DEPT D      
            WHERE E.DEPTNO = D.DEPTNO;     
       SQL> EXIT;     

[b]3. TRACE 화일 변환[/b]

   2. 단계에서 SQL 문을 실행하면  user_dump_dest 에 지정된 디렉토리에 TRACE 화일이  
   생기고 tkprof 를이용하여 화일을 변환시킨다. TRACE 화일은 쉽게 찾을 수 있는 형태가  
     아니므로 SQL문을 실행하기 전에  dump 디렉토리에 있는 ora_xxxx.trc 화일을 모두   
    삭제하거나 가장최근에 생긴 화일중에서 찾아야 한다.     

   예. $ cd $ORACLE_HOME/rdbms/log     
       $ tkprof ora_1111 out sort=fchqry,fchcu explain=scott/tiger print=20     

    ora_1111  : TRACE 화일      
    out      : OUTPUT 화일. 디렉토리에 out.prf 로 생긴다.      
    sort     : 지정된 OPION(fchqry,fchcu) 에 ASCENDING 순으로 SQL 문을     
                SORTING 한다.                
    explain   : SQL 문의 EXECUTION PLAN 을 발생시킨다.     
    print     : 지정된 갯수의 SQL문에대해서만 TRACE 결과를 PRINT 한다.     

[b]4. SQL TRACE 결과 분석[/b]

**********************************************************************     
count   = number of times OCI procedure was executed     
cpu     = cpu time in seconds executing      
elapsed = elapsed time in seconds executing     
disk    = number of physical reads of buffers from disk     
query   = number of buffers gotten for consistent read     
current = number of buffers gotten in current mode (usually forupdate)     
rows    = number of rows processed by the fetch or execute call     
**********************************************************************     

SELECT COUNT(*)     
FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO      

Parse 
Execute 
Fetch
 Count 
------- 
2 
2 
2
 Cpu 
------ 
0.0 
0.0 
0.0
 elapsed 
----- 
0.0 
0.0 
0.0
 disk 
----- 
0 
0 
0
 query 
---- 
0 
0 
0
 current 
------- 
0 
0 
33
 rows 
---- 
0 
0 
2
 


  
Misses in library cache during parse: 1     
Parsing user id: 8  (SCOTT)     

Rows     Execution Plan     
-------  ---------------------------------------------------     
      0  SELECT STATEMENT     
      0    SORT (AGGREGATE)     
      16      NESTED LOOPS     
      16        TABLE ACCESS (FULL) OF 'EMP'     
      16        INDEX (UNIQUE SCAN) OF 'DEPT_PRIMARY_KEY' (UNIQUE)     

*********************************************************************     
분석예)     
 a.  cpu, elapsed   정보가없는 경우는 initSID.ora 에      
     timed_stattistic = false 로 되어 있기때문이다.      
 b.  Execute count 와 Fectch count 가 동일하게 크다고하면 ARRAY FETCH      
     사용을 고려함.     
 c.  fetch 된   rows 수 : query + current = 1 : 4 이하이면 SQL 문은      
     적절히 사용된 경우이고, row 수에비하여  query + count 가 상당히     
     크면 부적절하게 사용된 SQL 문이므로( count,sum,distinct 등 Group     
     function 을 사용하는경우는 예외) 다음 내용들에대해서 재 검토가     
     필요하다.       
     .INDEX 사용,구성여부     
     .ROWID 사용          
     .COST_BASED OPTIMIZER 사용(ORACLE7)     
     .ARRAY FETCH 사용     
     .SORTING 을 피할수 있는 SQL 문 구사     
 d.  Parse count,Execute count 가 비슷한경우  RELEASE_CURSOR,     
     HOLE_CURSOR OPTION 사용하여 Parse count 를 줄임.  
 

Oracle Korea Customer Support Technical Bulletins

[Top]
No.
제목
작성자
작성일
조회
9254TABLE SEGMENT/EXTENT 내의 FREE SPACE/USED SPACE USAGE 확인 방법
정재익
2002-01-05
5127
9253LONG RAW DATA(IMAGE) 를 INSERT, SELECT 하기
정재익
2002-01-05
16123
9252INSERT 가 SELECT 보다 느린 경우...
정재익
2002-01-05
5284
9251SQL TRACE FACILITY 를 사용하여 APPLICATION TUNING 하는 방법
정재익
2002-01-05
5896
9249Firewall 안쪽의 Oracle NT Server에 connect가 않되나요
정재익
2002-01-05
5954
9248MIDDLEWARE:TP-monitor Concept and Tuxedo 개요 및 설명
정재익
2002-01-05
5316
9247MIDDLEWARE:Tuxedo-Oracle connection과 관련된 정보
정재익
2002-01-05
7237
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다