[Oracle] 실행계획(Explain plan/Execution plan)
SQL *Plus 에서의 실행계획
- 실행계획(Explain plan) 테이블 생성 ( TABLESPACE TOOLS; 구문 추가 --> SYSTEM테이블 스페이스 외의 테이블 스페이스 생성)
- 주기적으로 이 테이블을 TRUNCATE 하면서 운영.
- SYSTEM 데이터베이스 계정으로 접속해서 utlxplan.sql 파일을 실행.
- PLAN_TABLE에 SYNONYM(시노님)과 GRANT(권한부여) 명령으로 적절한 권한 생성.
AUTOTRACE 기능의 활성화
- $ORACLE_HOME/sqlplus/admin 디렉토리 안의 plustrace.sql 을 실행시켜 AUTOTRACE 기능을 활성화
@plustrce
GRANT PLUSTRACE TO PUBLIC;
--> PLUSTRACE 롤을 PUBLIC에 부여.
활용
- SET AUTOTRACE ON
: SQL을 실행하여 얻어진 결과 셋 외에, 그 쿼리에 관련된 실행계획과 SQL 실행에 소모된 통계 리소스(비용) 현황을 보여준다.
- SET AUTOTRACE TRACEONLY
: SQL을 실행하나, 결과 셋을 출력하지는 않는다. 실행계획과 실행에 수반된 리소스/비용 정보만 출력된다.
- SET AUTOTRACE TRACEONLY EXPLAIN
: SQL을 실행시키지 않으며, 단지 실행계획만 보여준다. 즉 쿼리를 실행하지 않고, 그 쿼리의 실행계획만을 알고 싶을때 사용하는 옵션이다.
Statistics (통계정보라기보다는, SQL 수행에 드는 비용..)
- db block gets + consistent get = 논리적 읽기(logical reads)라고 일컫는다.
- 반대되는 개념이 물리적 읽기(physical reads)이다.
- physical reads
: 로우를 추출하기 위해 디스크로부터 데이터 블록을 읽어들인 횟수
- logical reads
: 물리적 디스크가 아닌 데이터베이스 버퍼 캐시 내에서 읽어들인 횟수
* physical reads 또는 logical reads 값이 클 수록 개선의 여지가 많은 쿼리라 볼수 있다.
논리적I/O와 물리적 I/O값을 SQL튜닝을 통해 전후 비교하여 성능개선 여부를 판단할 수 있다.
Read-consistent 모드로 페치된 블록들 (SELECT문) 은 consistent get 으로 기록.
Commit없이 INSERT/UPDATE/DELETE 에 의해 변경된 블록들을 패치하는 경우는 'db block gets' 횟수로 기록.
'개발자 > Oracle' 카테고리의 다른 글
[Oracle] 실행계획(Explain Plan) (0) | 2015.08.09 |
---|