달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2010. 9. 8. 22:04

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 관련 힌트는 찾지 못했음.
*/

:
Posted by Elick