Oracle 병렬처리 Work/ORACLE2010. 9. 8. 22:04
/*
병렬 처리란 SQL문이 수행해야 할 작업 범위를 여러개의 작은 단위로 나누어 여러 프로세스(또는 스레드)가 동시에 처리하는 것을 말한다.
*/
explain plan set statement_id = 'SQL1' for SELECT /*+ PARALLEL(TLOG07TT 4)*/ COUNT(*) FROM TLOG07TT;
explain plan set statement_id = 'SQL1' for SELECT COUNT(*) FROM TLOG07TT;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'SQL1', 'BASIC'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'SQL1', 'TYPICAL'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'SQL1', 'SERIAL'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'SQL1', 'ALL'));
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'SQL1', 'OUTLINE')); -- 10g
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'SQL1', 'ADVANCED')); -- 10g
-- @?/rdbms/admin/utlxpls
-- Partition Table의 경우.
SELECT COUNT(*) FROM TLOG07TT;
SELECT /*+ PARALLEL(TLOG07TT 4)*/ COUNT(*) FROM TLOG07TT;
SELECT /*+ PARALLEL_INDEX(TLOG07TT TLOG07S1 5)*/ COUNT(*) FROM TLOG07TT WHERE EXITDT > (SYSDATE - 2);
SELECT /*+ PARALLEL_INDEX(TLOG07TT TLOG07S1 5) INDEX_FFS(TLOG07TT TLOG07S1)*/ COUNT(*) FROM TLOG07TT WHERE EXITDT > (SYSDATE - 2);
-- Heap Table의 경우.
SELECT * FROM TAB1;
SELECT /*+ PARALLEL(TAB1 4)*/ * FROM TAB1;
SELECT /*+ PARALLEL_INDEX(TAB1 TAB1_S3) */ COUNT(*) FROM TAB1 WHERE JUMIN > '9001011'; -- partition table 아니기 때문에 안됨.
SELECT /*+ PARALLEL_INDEX(TAB1 TAB1_S3) INDEX_FFS(TAB1 TAB1_S3) */ COUNT(*) FROM TAB1; -- partition table 아니어도 되는 경우 : INDEX FAST FULL SCAN 을 해야 한다.
/*
Oracle 9i에서 사용가능한 병렬처리 관련 힌트를 찾아보았지만, DESC 관련 힌트는 찾지 못했음.
*/