2012. 11. 23. 16:10

[Oracle] Toad 실행계획

여러개의 쿼리가 있을경우엔 블록지정을 해줘야만 실행계획이 나온다.
Explain plan 을 실행하려면 ctrl + E 를 눌러주면 아래의 상태창에 실행 계획이 나온다.

 

 

 

1. 트리를 보면 왼쪽에 숫자가 나온다. 1부터가 실행되는 순서!!

 - 플랜은 트리 형태로 되어 있으며, 자신보다 하위 레벨이 있으면 하위 레벨부터, 같은 레벨이라면 상위 로우 소스부터 실행된다.

 


2.  TABLE ACCESS FULL 는 쿼리상 나오면 안됨(겁나 느림)!!

 - 옵티마이저가 통계 정보를 이용해 추정한 값이라고 보면 된다.

 

Cost - 옵티마이저가 해당 오퍼레이션을 수행하는데 필요하다고 판단한 비용. 측정을 위한 단위가 있는 것은 아니고, 그냥 weight 값 정도로 생각하면 됨. CBO는 여러 가지 실행 계획을 세우고 이에 대한 비용(cost)를 비교한 다음 비용이 가장 적은 실행 계획으로 SQL을 실행함.

 

Cardinality - 오퍼레이션을 수행할 때 접근하게 될 row 수. 역시 옵티마이저가 추정한 값
 
Bytes - 해당 오퍼레이션을 수행할 때 접근하게 될 byte 수. 옵티마이저가 추정한 값

 

 

3. 실행계획에서는 옵티마이져가 판단한 값!!

 - 실제 oracle의 실행과 다를수도 있으며 정확한것은 Trace를 통해서 확인해야 한다. 단지 이것을 어떻게 쿼리를 풀어나가는지를 확인하는 단계다.

 

 

2012. 2. 16. 17:06

[Oracle] 쿼리문 처리 과정

SQL  →  User Process  →  Sever Process  →  Parse (구문분석, 실행계획)  →  Execute (실행)  →  Fetch (인출) 


1. Parse
1)
검사
-
문법검사 : keyword 검사 (오라클에서 만들어놓은 selece, from, where...
)
-
권한검사 : 접속한사용자의 권한에 관한 검사 (사용가능한 범위에 관한 권한여부 조사
)
- 의미검사 : *, emp 등의 컬럼명이나 테이블명 등 사용자가 만든것들에 대한 검사

2)실행계획 - 딕셔너리와 인덱스를 바탕으로 '옵티마이져'가 담당한다.
완벽한인덱스가 있다면 최선의 실행계획을 도출해 낼것이다
.

검사단계에서 실행계획단계로 오면 먼저 Library Cache에서 기존에 만들어놓은 동일한 쿼리문에 대한 실행계획이 있는지 먼저 찾아보고 없다면, 옵티마이저가 실행계획을 만드는 작업을하고 결과물은 Library Cache에 기록해 놓는다. 만약 기존에 만들어놓은 실행계획이 있다면 바로 다음단계로 넘어가게된다. 여기서 Soft Parse, Hard Parse 라는 개념이 나오게 되는데


검사단계+실행계획단계 Library Cache 검색 후 기존 '실행계획' 찾아서 다음단계로 -> Soft Parse
검사단계+실행계획단계 Library Cache 검색 후 옵티마이저가 실행계획 작성하고 다음단계로 -> Hard Parse

Hard Parse
단계에서 옵티마이저가 만든 실행계획은 Library Cache에 저장되고 만약 다음에 동일한 쿼리문이 실행된다면 그때는 Soft Parse 로 진행이 될것이다.

2. Excute

인덱스의 데이터 위치정보를 기반으로 DATABASE에서 데이터가 들어있는 블락을 통채로 Instance 끌어올리는 과정이다.

3. Fetch
Instance에서 통채로 끌어올려진 블락에 들어있는 데이터들을
분석해서 원하는 데이터만 골라내어 sql문의 결과를 도출해 내는 과정이다.

'Database / Sql' 카테고리의 다른 글

[Oracle] SESSION 수 체크  (0) 2012.02.23
[Oracle] LOCK 해제  (0) 2012.02.23
[Oracle] USER_SOURCE  (0) 2011.12.27
[MS-SQL] CONVERT를 이용한 날짜 형식 변경  (1) 2011.12.14
[Oracle] 오라클 버전 확인  (0) 2011.11.16