3. SQL 실행계획 확인 ★★★ (미완)
[기타SQL]/SQL tunning 2014. 12. 16. 12:18 |
▶SQL실행계획 확인방법
* SQL Plus의 Autotrace기능 (가장 일반적★) (ex.병원의 엑스레이) : 실행결과, 실행계획, 통계정보
* SQL trace 파일 생성 및 TKPROF 사용 (일반적★) (ex. SQL trace = 병원의 MRI처럼 훨씬 자세하다)
- 모든 SQL 문장에 대한 추적파일 생성
- TKPROF로 추적 파일의 내용 분석
- 실제 튜닝에서 가장 많이 활용
* SQL 튜닝을 위한 기본적인 툴
* Oraccle Enterpise Manager : SQL 스크래치 패드 (GUI환경)
* EXPLAIN PLAN명령어 사용 : PLAN_TABLE에 실행정보저장
▶SQL*Plus Autotrace 기능 활성화
* plustrace 권한 생성 |
> conn / as sysdba > @?/sqlplus/admin/plustrace.sql |
* 해당 사용자에게 plustrace 권한 부여 |
> conn / as sysdba > grant plustrace to scott; |
* 해당 사용자로 로그인 후 plan table 생성 |
>conn scott/tiger > @?/rdbms/admin/utlxplan.sql |
▶Autotrace 모드 설정
> set autotrace on --모든 메뉴를 다 보여달라 > set autot off --autot 까지만 써도됨. > set autot traceonly -- > set autotrace traceonly explain -- > set autotrace traceonly statistics -- |
▶SQL*Plus autotrace 예제
SQL> set autotrace on SQL> select * from dept where deptno = 10; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK Execution Plan ------------------------------------------------------ 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (FULL) OF 'DEPT' Statistics ------------------------------------------------------- 178 recursive calls 0 db block gets 27 consistent gets 7 physical reads 0 redo size 629 bytes sent via SQL*Net to client 655 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 2 sorts (memory) 0 sorts (disk) 1 rows processed
|
▶SQL Trace기능
* Auto trace는 자신이 수행하는 쿼리만 추적할 수 있지만, SQLTrace는 다른사람이 수행하는 쿼리를 몰래 추적할 수 있는 장점이 있다.
* 모든 SQL수행에 대한 Trace파일 생성
- 인스턴스 레벨 추적 : 전부 다 추적하므로 많은 부하 발생 - 각 프로세스별 추적 파일 생성
- 세션 레벨 추적 : 이거로 써야된다!
* 구문분석, 실행 및 인출 단계에 대한 크기 및 시간 통계 정보
* 시스템의 전체적인 분석에 필요
* 관련 초기화 파일
- USER_DUMP_DEST에 추적파일 생성됨.
- TIMED_STATISTICS=true : 정확한 시간 통계치
▶SQL trace 기능 활성화
인스턴스 레벨 - 초기화 파라미터 수정, 재시동 |
SQL_TRACE = true |
현재 접속중인 세션(내 것만 읽는다.) |
sys> grant alter session to scott; --10g부터는 권한 줘야된다. scott> alter session set tracefile_identifier='AAA'; -- 설정줌. scott> alter session set sql_trace=true; scott> alter session set timed_statistics=true; -- 바로 위 두 문장을 쓰거나 또는 scott> EXECUTE dbms_session.set_sql_trae(true) 이 문장을 써주면 된다. scott> show parameter user_dump_dest; --alertlog경로확인 $ cd /app/oracle/diag/rdbms/testdb/testdb/trace --select해서는 볼 수 없고, 파일에 직접 가봐야 알 수 있다. $ ls *AAA* --조회하면 trace 파일이 생성되어 있다. 이제 vi로 열어 분석하면 된다. |
임의의 세션 추적 (다른사람 것도 읽는다.) |
sql> execute dbms_system.set sql_trace_in_session (sid, serial#, true); -- v$session을 통해 SID와 SERIAL# 구함. |
▶SQL trace 리포트 생성 - TKPROF
- USER_DUMP_DEST에서 해당 trace 파일 확인
>tkprof 파일명.trc 임의로생성.txt explain=scott/tiger sys=no --sys계정으로 만든 것은 빼고 보기 편하게 정렬해서 임의생성.txt에 저장. |
-43page
'[기타SQL] > SQL tunning' 카테고리의 다른 글
4. oracle optimizer(미완) (1) | 2014.12.17 |
---|---|
2. SQL 처리구조 (0) | 2014.12.16 |
1. 튜닝방법론 및 SQL처리구조 (0) | 2014.12.16 |