728x90
반응형
NOLOGGING 모드란?
Oracle에서 NOLOGGING은 특정 DML 작업(특히 대량 데이터 적재 작업 등)에 대해 Redo 로그 생성을 최소화하여, 로그 기록으로 인한 I/O 오버헤드를 줄이는 방식입니다.
즉, 일반적으로는 모든 DML 작업이 Redo 로그를 생성하여 복구를 가능하게 하지만, NOLOGGING을 사용하면 이 Redo 로그 생성을 생략하거나 최소화합니다.
[성능 향상 이유]
- Redo 로그 생성 생략으로 I/O 부하 감소
- 일반적으로 대량 데이터 적재 시 Redo 로그 생성이 전체 작업의 병목이 되기 쉽습니다.
- NOLOGGING 모드를 사용하면 이 부분을 생략하므로 적재 속도가 향상됩니다.
- 대량 적재에 유리
- 특히 INSERT /*+ APPEND */ 또는 DIRECT PATH INSERT와 함께 사용 시 효과가 큽니다.
- 예:
-
sql복사편집INSERT /*+ APPEND */ INTO my_table SELECT * FROM source_table;
- 병렬 적재와 함께 사용 시 효과 배가
- 병렬 처리 + NOLOGGING = 매우 빠른 적재
[주의사항]
- 복구 불가능한 데이터 손실 위험
NOLOGGING 모드에서 수행된 작업은 Redo 로그에 기록되지 않기 때문에, 만약 장애가 발생하면 해당 데이터는 복구가 불가능합니다. - 백업이 필요함
NOLOGGING 작업 후에는 필히 백업을 수행해야 합니다. (RMAN 백업 또는 export 등) - 모든 작업에 적용되는 것은 아님
일반적인 DML(INSERT, UPDATE, DELETE)은 NOLOGGING의 영향을 받지 않고, Direct Path INSERT와 같은 특정 작업에만 적용됩니다.
Oracle에서 Direct Path Insert는 일반적으로 INSERT /*+ APPEND */ 또는 INSERT /*+ APPEND_VALUES */ 힌트를 사용해서 수행합니다.
✅ 기본 Direct Path Insert 예제
sql
복사편집
INSERT /*+ APPEND */ INTO target_table SELECT * FROM source_table;
- /*+ APPEND */ 힌트는 Oracle에게 Direct Path Insert 방식으로 수행하라고 명령합니다.
- 기존 데이터를 고려하지 않고 테이블의 High Water Mark(최대 사용 블록) 이후에 바로 데이터 기록함.
- NOLOGGING 모드와 함께 쓰면 속도가 더욱 빨라집니다.
✅ APPEND_VALUES (Oracle 11g 이후)
Oracle 11g부터는 VALUES 구문에서도 Direct Path Insert가 가능합니다.
sql
복사편집
INSERT /*+ APPEND_VALUES */ INTO target_table (col1, col2) VALUES (1, 'ABC');
- 다만, APPEND_VALUES는 제한적인 환경에서만 효과가 있으며, 대량 적재에는 주로 APPEND와 SELECT 형태를 사용합니다.
✅ NOLOGGING과 함께 사용 예시
sql
복사편집
ALTER TABLE target_table NOLOGGING; INSERT /*+ APPEND */ INTO target_table SELECT * FROM source_table;
💡 이 경우 target_table은 LOGGING이 비활성화된 상태에서 Direct Path로 데이터를 받기 때문에 적재 속도 향상 효과가 큽니다.
✅ Direct Path Insert만 가능한 이유
- Direct Path Insert는 데이터를 기존 테이블 구조와 무관하게, 테이블의 빈 블록 영역에 바로 기록하는 방식입니다.
- 이는 기존 레코드를 건드리지 않기 때문에 가능한 방식입니다.
- 반면, UPDATE나 DELETE는 기존 레코드의 위치와 관계된 작업이므로, 기존 데이터 블록에 접근하여 변경 사항을 반영해야 하며, 이에 따라 Redo 로그, Undo 데이터, 트리거, 제약조건 등을 모두 고려해야 합니다.
📌 요약 비교표
구분Direct Path 지원 여부특징
| INSERT | ✅ 지원 (APPEND, APPEND_VALUES) | 빠름, NOLOGGING 가능 |
| UPDATE | ❌ 미지원 | 기존 레코드 변경 → 기존 블록 접근 |
| DELETE | ❌ 미지원 | 기존 레코드 삭제 → Undo/Redo 필수 |
728x90
반응형
'oracle' 카테고리의 다른 글
| [ORACLE] SQL PLAN 고정 (0) | 2024.06.24 |
|---|---|
| [ORACLE] ORACLE LIFETIME SUPPORT POLICY (0) | 2024.06.20 |
| [ORACLE] AWR DATA export/import (0) | 2024.06.14 |
| [ORACLE] FRA 설정 (0) | 2024.06.13 |
| [ORACLE] ORA-600 [kkdlcob-objn-exists] [1087263] (0) | 2024.06.11 |