실행계획
Plan Table
아래와 같이 실행계획을 확인해보고자 한다.
EXPLAIN PLAN FOR
SELECT *
FROM emp e, dept d
WHERE e.deptno = d.deptno
AND e.ename = 'SMITH';
위 실행계획을 확인하기 위해서 Plan table을 생성하려고 했는데 실패했다.
@$ORACLE_HOME/rdbms/admin/utlxpls.sql
/* 또는 아래와 같이 ?로 $ORACLE_HOME을 대체한다 */
@?/rdbms/admin/utlxpls.sql
아마 이전에 이미 생성해두고 까먹었던가?
SELECT *
FROM all_synonyms
WHERE synonym_name = 'PLAN_TABLE';
원인을 찾아보던 중, 9i 버전 이상에서는 DBMS_XPLAN 패키지를 사용하라는 문구를 발견하였으니,
해당 패키지를 사용하여 보자.
From Oracle 9i onward, you should display execution plans using the DBMS_XPLAN package.
-- ORACLE-BASE
Version Check
현재 오라클 버전을 확인하여 해당 문서를 찾아 DBMS_XPLAN 사용법을 확인해보자.
select * from v$version;
DBMS_XPLAN
Oracle Database Online Documentaion 12c Release 1 > DBMS_XPLAN
사용예시
위 문서에 나온 예제를 따라 실행계획을 확인해보자.
SET LINESIZE 130
SET PAGESIZE 0
SELECT * FROM table(DBMS_XPLAN.DISPLAY);
파라미터 사용
여기에는 3개의 파라미터를 사용할 수 있다.
- Plan Table 명
- statement_id (null인 경우 가장 마지막 실행계획)
- Format option
/* SET STATEMENT ID*/
EXPLAIN PLAN SET statement_id = 'SI0001' FOR
SELECT * FROM emp WHERE ename = 'KING';
SELECT * FROM table(DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'SI0001'));
statement_id를 찾을 수 없는 경우, 아래와 같은 에러가 발생한다.
/* SIMPLE */
SELECT * FROM table(DBMS_XPLAN.DISPLAY('PLAN_TABLE', null, 'BASIC'));
병렬처리 실행계획
다음은 병렬처리에 대한 실행계획이다.
ALTER TABLE emp PARALLEL;
EXPLAIN PLAN for
SELECT /*+ ordered use_has(d) full(d) full(e) noparallel(d) parallel(e 4)*/
count(*), min(sal), sum(sal)
FROM emp e, dept d
WHERE e.deptno = d.deptno
AND e.ename ='hermann'
ORDER BY e.empno;
SET LINESIZE 130
SET PAGESIZE 0
SELECT * FROM table(DBMS_XPLAN.DISPLAY);
실제 예상과는 다르게 병렬처리가 되지 않은 것으로 보이는데, 추후에 좀 더 알아봐야겠다.
Author And Source
이 문제에 관하여(실행계획), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@shy_dd/실행계획저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)