본문 바로가기

DataBase/Oracle

[펌] 실행계획 보는 법


[Oracle] 실행계획 보는 법

***설명
플랜에서 나오는 각 라인을‘로우 소스(Row Source)’라고 한다.
플랜을 보면서 처리 순서를 판단하는 것은 간단하다. 플랜은 트리 형태로 되어 있으며, 자신보다 하위 레벨이 있으면 하위 레벨부터, 같은 레벨이라면 위(상)의 로우소스부터 실행 된다.
위플랜의‘Optimizer=CHOOSE’에서알수있듯이해당SQL 문장은 옵티마이저 모드가 CHOOSE에서 플랜이 만들어진 것이다. 또한 플랜에서 ‘Cost=’의 항목이 나오면CBO로 풀렸다는 것이다. RBO인지 CBO인지의 판단은 옵티마이저 모드의 항목으로 판단하는 것이 아니라 ‘Cost=’로 판단한다는 것에 주의하자.
위 플랜에서 2개의 테이블 DEPT와 EMP 테이블 각각의 액세스 경로를 확인할 수 있다. 모두 인덱스를 사용하고 있는 것이다. 또한 조인메소드로는 Nested Loop Join이 사용되었다. 조인 순서는 자신보다 하위 레벨이 있으면 하위 레벨부터, 같은 레벨이라면 위의 로우 소스부터 실행된다는 법칙을 적용해보면, ID를기준으로4 -> 3 -> 5 -> 2 -> 1 -> 0의 순서로 처리 된다. 단 조인메소드가 Nested Loop이기 때문에 3에서 리턴되는 로우 수만큼 다음 단계가 반복된다. 그러므로 조인 순서는 DEPT -> EMP 순으로 Nested Loop로 처리될 것 이라는 것을 알 수 있다.
또한‘Card=5’는Computed Cardinality를나타내며, 몇 건의 로우가 리턴될 것인지를 CBO가 통계정보를 이용해서 계산해낸 값이다.
‘Bytes=250’은 리턴 될 로우들의 바이트를 나타내므로 5 로우에 250바이트 정도의 리턴 로우가 발생할 것이라는 것을 예측할 수 있다. 통계 정보만 정확하다면 이들 값도 상당히 정확하다고 보면 된다.
Execution Plan을제대로보기위해서는,

• 각 데이타베이스 사용자마다 PLAN_TABLE이 있어야 하는데, PLAN_TABLE은 오라클 버전마다 다르다. 해당 오라클 버전의 $ORACLE_HOME/rdbms/admin/utlxplan.sql을 실행하면 만들어진다.
• SQL을 실행하지 않고 Trace만 보는 방법도 있다.
• EXPLAIN PLAN’<리 스 트 1>, SQL*Plus의‘ SET AUTOTRACE TRACEONLY EXPLAIN’<리스트 2>.
• 플랜을PLAN_TABLE에서 확인할 수도 있다.
Oracle8i Database 이전까진 Plan_Table에서 직접 선택하고, Oracle8i Database 이상부터는 Plan_Table에서 직접 선택하거나 $ORACLE_HOME/rdbms/admin 위치에서 utxpls.sql(Serial Plan) 또는 utlxplp.sql(Parallel Plan) 스크립트를 실행하면 된다. Oracle9i Database 이전에서는 utxpls.sql, utlxplp.sql 외에‘select * from table(dbms_xplan.display);’

'DataBase > Oracle' 카테고리의 다른 글

[펌] 달력 SQL  (0) 2009.08.13
특정일자의 하루전일자 구하기  (0) 2009.04.17
테이블 Analyze  (0) 2009.01.22
테이블스페이스 변경  (0) 2009.01.22
테이블rename  (0) 2009.01.19