티스토리 뷰

병렬 처리(Parallel Processing)

오라클에서 병렬 처리(Parallel Processing)하나의 SQL를 처리하기 위해 여러 개의 프로세스를 띄워 작업 속도를 보다 빠르게 하는 것을 목표로 하는 기능입니다.

 

기본적으로 사용자 세션(User Session)이 붙게 되면(=SQL Plus 혹은 DBeaver, Toad 등과 같은 툴로 접근하는 경우) 서버 메모리에 Dedicate Server를 띄우게 됩니다. 그리고 하나의 Dedicate Server가 한 세션에 대한 SQL를 처리하게 됩니다. 하지만, 병렬 처리(Parallel Processing)는 여러 개의 Dedicate Server를 통해 SQL를 분할하여 처리합니다.

 

병렬 처리(Parallel Processing)는 성능 향상에 있어, 쿼리 튜닝이나 인덱스 개선과 같은 방법만으로 해결할 수 없을 때 사용하는 방법입니다. 한 개의 SQL에 대해서 여러 개의 Dedicate Server가 동작하여 나누어서 작업을 진행합니다.

 

병렬 처리(Parallel Processing) 프로세스

Using parallel operations enables multiple processes (and potentially processors) to work together simultaneously to resolve a single SQL statement. This feature improves data-intensive operations, is dynamic (the execution path is determined at run time), and (when wisely implemented) makes use of all of your processors and disk drives. There are some overhead costs and administrative requirements, but using parallel operations can improve the performance of many queries.

병렬 작업을 사용하면 여러 프로세스(잠재적인 프로세스)가 동시에 함께 작동하여 단일 SQL문을 해결할 수 있습니다. 이 기능은 데이터 집약적 작업을 개선하고, 동적이며(실행 경로는 런타임에 결정된다.) 당신의 모든 프로세서와 디스크 드라이브를 사용합니다. (현명하게 구현했을 경우) 일부 오버헤드 비용과 관리 요구 사항이 있지만 병렬 작업을 사용하면 많은 쿼리의 성능을 개선할 수 있습니다.

출처: https://logicalread.com/oracle-11g-parallel-operations-mc02/

 

 

Parallel Query와 Parallel DML

Oracle DB에서 병렬 처리(Parallel Processing)는 Parallel QueryParallel DML. 2가지로 나뉘어 집니다. 두 방법 모두 데이터베이스 작업을 병렬로 수행하는 방식이지만, 각각의 목적과 사용 방법이 다릅니다.

Parallel Query

  • 정의: Parallel Query는 데이터베이스에서 SELECT 문 쿼리를 실행 시, 여러 프로세스나 스레드를 사용하여 쿼리를 병렬로 처리하는 기능
  • 목적: 대량의 데이터를 처리할 때 성능을 향상시키기 위해 사용됩니다. 여러 프로세스가 동시에 데이터를 읽고 처리함으로써 쿼리 실행 시간을 단축할 수 있습니다.
  • 사용 예시: 대규모 데이터 집합에서 집계 작업, 조인, 필터링 등을 수행할 때 유용합니다.

Parallel DML

  • 정의: Parallel DML은 INSERT, UPDATE, DELETE 문과 같은 DML 작업을 병렬로 수행하는 기능입니다.
  • 목적: 대량의 데이터 수정 작업을 수행할 때 성능을 향상시키기 위해 사용됩니다. 여러 프로세스가 동시에 데이터 수정 작업을 수행할 수 있습니다.
  • 사용 예시: 대량의 데이터를 수정하거나 삽입할 때, 예를 들어 ETL(Extract, Transform, Load) 작업에서 유용합니다.

정리

항목 Parallel Query Parallel DML
목적 데이터 조회 성능 향상 데이터 수정 성능 향상
사용 예 대량 데이터 집합의 SELECT 쿼리 대량 데이터의 INSERT, UPDATE, DELETE 작업
적용되는 문 SELECT INSERT, DELETE, UPDATE
병렬 처리 방법 여러 프로세스가 동시에 데이터를 읽음 여러 프로세스가 동시에 데이터를 수정

 

 

병렬 처리(Parallel Processing) 사용 방법

Parallel Query

다음과 같은 쿼리문이 있다고 가정해보겠습니다.

SELECT COUNT(*) FROM emp_big;

 

해당 쿼리문을 병렬 처리(Parallel Processing)하기 위해선 간단합니다. 쿼리문을 전달할 때 힌트(Hint)와 함께 전달하면 되겠습니다.

-- 병렬 프로세스 4개로 쿼리를 처리
SELECT /*+ parallel(4) */ COUNT(*) FROM emp_big;

단일 SQL 처리 경과 시간
병렬 SQL 처리 경과 시간

 

또한, SQL 모니터(SQL Monitor)를 이용하면 정확히 어떻게 병렬 처리를 하는지 확인할 수 있습니다. SQL 모니터를 보려면 모니터 힌트를 주면 됩니다.

-- 힌트를 통해 sql monitor 실행
SELECT /*+ monitor parallel(4) */ COUNT(*) FROM emp_big;

-- SQL 모니터 호출
SELECT dbms_sqltune.report_sql_monitor(sql_id => '&sql_id', type=>'TEXT', report_level => 'ALL') FROM dual;

SQL 모니터 출력 결과

Parallel DML

Parallel DML 기능을 사용하기 위해선 다음과 같이 Parallel DML 선언을 해주어야 합니다. 과거에는 ALTER SESSION ENABLE PARALLEL DML을 선언한 후에야 Parallel DML을 사용할 수 있었지만, 버전이 업그레이드 된 이후로부터 따로 ALTER SESSION ENABLE PARALLEL DML을 선언하지 않아도 힌트를 통해서 Parallel DML을 사용할 수 있게 되었습니다.

-- parallel DML 선언, 11g까지의 방식
ALTER SESSION ENABLE PARALLEL DML;
UPDATE /* parallel(5) */ emp_big SET salary = salary + 2;

-- 12c 이후 방식, 따로 'alter session ~'을 하지 않아도 힌트로 해결이 가능
DELETE /* enable_parallel_dml parallel(5) */ FROM emp_big WHERE deptno > 2;

정리

병렬 처리는 프로세서를 여러 개 띄우는 것이기 때문에 자원을 많이 사용하게 됩니다. 따라서, 큰 작업을 처리할 때나 소수의 인원만이 작업을 할 때 병렬 처리를 이용하는 것이 좋습니다.

 

실무에서는 배치 프로그램과 같이 늦은 밤에 돌아가는 프로그램이나 DW 업무와 같이 소수의 사용자들이 사용하는 경우에만 이용합니다.

 

또한, 병렬 처리를 이용할 때 주의해야 할 점이 있습니다. 

다른 테이블을 복제하여 새로운 테이블을 생성할 때 다음과 같은 쿼리문을 통해 수행할 수 있습니다.

-- 테이블 복제 시 사용하는 명령어. B 테이블을 A 테이블로 복제
create table A as select ... B;

이러한 작업을 더 빨리 진행하기 위해 parallel 옵션을 통해 수행할 수도 있습니다.

create table A parallel(10) as select ... B;

하지만, 이러한 경우 A 테이블의 Degree 값으로 10이 설정될 수 있습니다. 그렇게 되면 사용자가 parallel 값을 주지 않더라도 자동으로 parallel 처리를 할 수 있습니다. 이를 해결하기 위해선 다시 parallel 값을 설정해주어야 합니다.

alter table A parallel 1;

참고

https://www.youtube.com/watch?v=XMA7IGODoak

https://logicalread.com/oracle-11g-parallel-operations-mc02/

글 보관함
최근에 올라온 글
Total
Today
Yesterday