ORACLE 은 SQL 을 병렬 힌트를 부여하여 실행하는 기능을 제공합니다.
이 기능을 사용하면 어플리케이션 쪽에서 소스를 수정하지 않아도 되므로, 많은 이점이 있습니다.
병렬 힌트란, 데이터를 가져오는 작업을 단일이 아닌 멀티로 진행하여 빠른 응답을 제공받습니다.
병렬 쿼리 사용 방법
먼저, 병렬처리가 가능하도록 세션에 권한을 부여합니다.
SQL> ALTER SESSION ENABLE PARALLEL DML; Session altered.
병렬 쿼리는 PARALLEL 힌트를 사용하여 활성화 합니다. 괄호안의 수는 멀티 작업 스레드를 의미합니다.
SQL> SELECT /*+ PARALLEL (4) */ 2 C1, C2 3 FROM 4 MOZI; C1 C2 ---------- ---------- 1 1 2 2
병렬 실행이 되었는지 확인 방법
SQL 이 병렬 쿼리로 실행이 된 경우, V$PQ_SESSTAT 에 정보가 기록됩니다.
이 내용은 병렬 쿼리가 실행될 때마다 갱신되며, 세션이 로그아웃 하는 경우 데이터는 삭제됩니다.
Allocation Height 는 1개의 인스턴스의 병렬도를 나타내며,
Allocation Weight 는 RAC 구성때 병렬 쿼리를 실행하는 인스턴스 수를 의미합니다.
따라서 병렬도는 Allocation Height * Allocation Weight 로 계산할 수 있습니다.
SQL> SELECT * FROM V$PQ_SESSTAT; STATISTIC LAST_QUERY SESSION_TOTAL CON_ID ------------------------------ ---------- ------------- ---------- Queries Parallelized 1 2 0 DML Parallelized 0 0 0 DDL Parallelized 0 0 0 DFO Trees 1 2 0 Server Threads 4 0 0 Allocation Height 4 0 0 Allocation Width 1 0 0 Local Msgs Sent 14 28 0 Distr Msgs Sent 0 0 0 Local Msgs Recv'd 14 28 0 Distr Msgs Recv'd 0 0 0 STATISTIC LAST_QUERY SESSION_TOTAL CON_ID ------------------------------ ---------- ------------- ---------- DOP 4 0 0 Slave Sets 1 0 0 13 rows selected.
병렬 쿼리 사용은 항상 올바른가?
대량의 데이터를 병렬로 빠르게 처리할 수 있는 강력한 기능입니다.
하지만 병렬 쿼리를 사용하지 않더라도 빠르게 처리되는 쿼리, 시스템 자원의 부족 등의 경우에는 적합하지 않습니다.
'Database > Oracle' 카테고리의 다른 글
[ORACLE] SPM ( SQL Plan Management ) 로 실행 계획 관리하기 (0) | 2018.08.27 |
---|---|
[ORACLE] 다량의 데이터를 FORALL 로 빠르게 넣기 (0) | 2018.08.23 |
[ORACLE] INS-35075: The specified SID is already in use 해결하기 (0) | 2018.08.07 |
[ORACLE] ORA-65096: invalid common user or role name 해결하기 (0) | 2018.08.07 |
[ORACLE] ORA-01001: invalid cursor 해결하기 (0) | 2018.08.02 |