Oracle에서는 병렬 INSERT를 통해 데이터를 빠르게 삽입할 수 있습니다. 일반적인 INSERT 작업은 단일 세션에서 수행되지만, 병렬 처리(Parallel Processing)를 이용하면 여러 개의 프로세스가 동시에 데이터를 삽입하여 성능을 향상시킬 수 있습니다.

1. 병렬 INSERT 개념

병렬 INSERT는 여러 개의 병렬 프로세스를 활용하여 데이터를 삽입하는 기법입니다. Oracle은 데이터를 블록 단위로 나누고 여러 개의 프로세스가 동시에 데이터를 쓰도록 하여 성능을 극대화합니다.

주요 특징

  • PARALLEL 힌트를 사용하여 여러 프로세스가 동시에 데이터를 삽입
  • DIRECT PATH INSERT 방식으로 수행되며, 기존 블록을 재사용하지 않고 새로운 블록에 데이터를 저장
  • 로그 기록 최소화 (NOLOGGING 옵션 사용 가능)
  • 트랜잭션 커밋 전까지 다른 세션에서 삽입된 데이터를 볼 수 없음

2. 병렬 INSERT 문법

병렬 INSERT는 세션 단위 설정 또는 SQL 단위 설정 방식으로 사용할 수 있습니다.

(1) 세션 단위 병렬 설정

ALTER SESSION ENABLE PARALLEL DML;
  • 병렬 DML을 수행하려면 세션에서 PARALLEL DML을 활성화해야 합니다.
  • 이 설정을 하지 않으면 PARALLEL 힌트를 사용해도 병렬 처리가 되지 않습니다.

(2) 병렬 INSERT 기본 문법

INSERT /*+ APPEND PARALLEL(t, 4) */ INTO target_table t
SELECT * FROM source_table;
  • APPEND 힌트: DIRECT PATH INSERT를 강제함
  • PARALLEL(t, 4): target_table4개의 프로세스가 병렬로 처리

3. 병렬 INSERT 예제

(1) 기본 병렬 INSERT 예제

ALTER SESSION ENABLE PARALLEL DML;

INSERT /*+ APPEND PARALLEL(emp, 4) */ INTO emp
SELECT * FROM emp_backup;
  • emp_backup 테이블에서 데이터를 읽어와 4개의 병렬 프로세스를 사용하여 emp 테이블에 삽입

(2) NOLOGGING 옵션과 함께 사용

ALTER SESSION ENABLE PARALLEL DML;

INSERT /*+ APPEND PARALLEL(sales, 8) */ INTO sales NOLOGGING
SELECT * FROM sales_backup;
  • NOLOGGING 옵션을 사용하여 REDO 로그 최소화
  • 8개의 병렬 프로세스를 사용하여 sales 테이블에 데이터 삽입

(3) 특정 조건을 적용한 병렬 INSERT

ALTER SESSION ENABLE PARALLEL DML;

INSERT /*+ APPEND PARALLEL(customers, 6) */ INTO customers
SELECT customer_id, name, region
FROM customer_staging
WHERE status = 'NEW';
  • customer_staging 테이블에서 status = 'NEW' 조건을 만족하는 데이터를 customers 테이블에 삽입
  • 병렬 6개 프로세스를 사용하여 성능 향상

4. 병렬 INSERT 주의사항

  1. SEQUENCE 사용 시 주의
    병렬 INSERT는 여러 프로세스가 동시에 실행되므로, SEQUENCE를 사용할 때 충돌이 발생할 수 있음
    • 해결 방법: CACHE 옵션을 사용하여 동시성을 보장
    sql복사편집CREATE SEQUENCE my_seq CACHE 1000;
  2. INDEX 유지 관리
    • 병렬 INSERT는 기존 INDEX를 무효화할 수 있음
    • INSERT 후 INDEX 재구성 필요 (ALTER INDEX REBUILD)
  3. APPEND 힌트 사용 시 ROLLBACK 불가
    • APPENDDIRECT PATH를 사용하므로 ROLLBACK이 불가능
    • 트랜잭션이 실패하면 테이블을 TRUNCATE 후 다시 INSERT해야 함
  4. 테이블 잠금(Locking) 이슈
    • 병렬 INSERT는 해당 테이블을 EXCLUSIVE MODE로 잠금
    • 동시에 다른 세션에서 DML(UPDATE, DELETE) 작업을 수행하면 충돌 가능

5. 성능 비교 (병렬 vs 단일 프로세스)

방식처리 시간CPU 사용량REDO 로그 발생량
단일 INSERT느림낮음많음
병렬 INSERT빠름높음적음 (NOLOGGING 사용 시)

6. 병렬 INSERT 성능 최적화

(1) 적절한 병렬도 설정

  • 시스템 리소스를 고려하여 최적의 병렬도 설정 (PARALLEL(t, N))
  • 일반적으로 CPU 코어 수의 2배 이하로 설정

(2) NOLOGGING 사용

  • NOLOGGING 옵션을 적용하면 REDO 로그를 최소화하여 성능 개선 가능
  • 단, 데이터 복구가 불가능하므로 주의

(3) TABLESPACE 관리

  • ASSM(Automatic Segment Space Management) 사용sql복사편집ALTER TABLE my_table STORAGE (FREELISTS 1);
    • 병렬 프로세스가 블록을 경합하지 않도록 설정

(4) DIRECT PATH 사용 강제

  • APPEND 힌트를 사용하여 Direct Path Load 방식 적용

7. 정리

항목내용
병렬 INSERT 사용 조건ALTER SESSION ENABLE PARALLEL DML 필요
DIRECT PATH 사용APPEND 힌트 적용 시 가능
INDEX 영향기존 INDEX가 무효화될 수 있음 (재구성 필요)
SEQUENCE 주의점CACHE 설정 권장
트랜잭션 처리APPEND 사용 시 ROLLBACK 불가

Oracle 병렬 INSERT는 대량의 데이터를 삽입할 때 강력한 성능 향상을 제공하지만, 적절한 튜닝과 주의사항을 고려해야 합니다. 🚀

zerg96

Recent Posts

MCP(Model Context Protocol)

오늘은 AI 생태계에 혁신적인 변화를 가져올 것으로 예상되는 MCP(Model Context Protocol)에 대해 상세히 알아보겠습니다. 2024년…

2주 ago

TPM(Trusted Platform Module)

1. TPM이란? TPM(Trusted Platform Module)은 국제 표준 기반의 보안 하드웨어 칩으로, 컴퓨터나 디지털 장비 내에서…

2주 ago

BitLocker

BitLocker는 Microsoft Windows 운영 체제에 내장된 디스크 전체 암호화(Full Disk Encryption) 기능입니다. 기업 환경뿐만 아니라…

2주 ago

《데블스 플랜 시즌2》: 게임인가, 연애인가? 소희 이렇게까지..?

시즌2, 기대했는데... 실망도 두 배!두뇌싸움을 기대했는데, 전략도 없는 자기들만의 감정에 따른 편가르기, 정치싸움이 되어 버린…

2주 ago

BPF도어(BPFdoor)

BPF(Berkeley Packet Filter) 도어는 해커가 관리자 몰래 뒷문을 새로 만든 것입니다.해커가 명령을 내려 특정 데이터들을 뒷문을…

2주 ago

IPC (Inter-Process Communication)

1. IPC의 개념과 목적 1.1 IPC란 무엇인가? IPC (Inter-Process Communication)는 운영체제 내의 서로 독립적인 프로세스…

3주 ago