본문 바로가기
카테고리 없음

DML 튜닝 (INSERT, UPDATE, DELETE) 완벽 가이드

by 유형제맘 2025. 8. 13.

데이터베이스에서 DML(INSERT, UPDATE, DELETE) 구문은 단순히 데이터를 수정하는 역할로만 보일 수 있지만, 대량 작업이나 실시간 트랜잭션 환경에서는 성능 병목의 주요 원인이 될 수 있습니다. 이번 글에서는 DML 성능을 최적화하기 위한 주요 기법과 실무 적용 팁을 정리하겠습니다.

DML 성능 저하 원인

  • DML 작업이 느려지는 이유는 주로 다음과 같습니다.
  • 인덱스 오버헤드 : UPDATE나 DELETE 시, 해당 테이블에 걸린 모든 인덱스를 갱신해야 함.
  • 잠금(Lock) 경합 : 동시에 여러 세션이 같은 데이터를 수정하려고 할 때 대기 시간 증가.
  • 로그 기록 부담 : 변경 이력(REDO, UNDO 로그) 기록이 많을수록 처리 속도 저하.
  • 트리거(Trigger) 및 제약조건(Constraint) : 불필요하거나 비효율적인 제약조건 검증이 추가 수행됨.

INSERT 튜닝 방법

대량 데이터 입력 시 속도를 높이기 위해 다음 방법을 고려합니다.
1. Direct-Path Insert 사용

  • Oracle: APPEND 힌트 사용
INSERT /*+ APPEND */ INTO orders SELECT * FROM staging_orders;

 

  • 데이터가 버퍼 캐시를 거치지 않고 직접 디스크에 기록되어 속도가 빨라짐.
  • 주의: 다른 세션에서 해당 테이블을 동시에 DML할 수 없음.

2. 인덱스 최소화

  • INSERT 시 불필요한 인덱스를 제거하고, 입력 완료 후 인덱스를 재생성하는 것이 더 빠름.

3. 제약조건 지연 적용

  • FOREIGN KEY, CHECK 제약조건은 데이터 입력 후 한 번에 검증.

4. 배치(Batch) 처리

  • 여러 건의 INSERT를 한 번에 처리
INSERT INTO orders (order_id, amount)
VALUES (:1, :2), (:3, :4), (:5, :6);

UPDATE 튜닝 방법

1. 불필요한 컬럼 수정 방지

  • 모든 컬럼을 UPDATE하지 말고, 실제 변경되는 컬럼만 수정.
-- ❌ 비효율적인 방법
UPDATE employees SET name = name, salary = 5000;

-- ✅ 효율적인 방법
UPDATE employees SET salary = 5000 WHERE employee_id = 101;


2. 인덱스 활용

  • WHERE 조건절이 인덱스를 탈 수 있도록 설계.
  • 대량 업데이트 시 인덱스 사용보다 풀스캔 후 병합이 더 효율적일 수도 있음.

3 병렬 처리(Parallel DML)
Oracle의 경우:

ALTER SESSION ENABLE PARALLEL DML;
UPDATE /*+ PARALLEL(employees, 4) */ employees SET salary = salary * 1.1;

DELETE 튜닝 방법

1. TRUNCATE 활용

모든 데이터를 삭제할 경우:

TRUNCATE TABLE employees;

장점:

  • 로그 최소 기록
  • 빠른 처리 속도

단점:

  • 롤백 불가능
  • 제약조건, 트리거 동작 안 함

2. 배치 삭제

  • 대량 DELETE 시 한 번에 삭제하지 않고, 일정 건수 단위로 나눠서 처리.
DELETE FROM orders WHERE order_date < '2024-01-01' AND ROWNUM <= 10000;
COMMIT;


3. 인덱스 및 제약조건 고려

  • DELETE 시 인덱스와 제약조건 때문에 부하가 커질 수 있음 → 불필요한 인덱스는 삭제.

공통 성능 최적화 팁

  • 자동 커밋(Auto Commit) 비활성화 : 대량 DML 시 매 건마다 COMMIT을 하면 성능 저하.
  • UNDO/REDO 최소화 : Direct Path, TRUNCATE, CTAS(Create Table As Select) 활용.
  • 병렬 처리 : CPU 코어를 활용해 대량 작업 속도 향상.
  • 테이블 파티셔닝 : 특정 파티션만 수정/삭제하여 범위를 줄임.

DML 튜닝 비교표

구분 주요 성능 저하 원인 최적화 방법
INSERT 인덱스 재작성, 제약조건 검증 Direct-Path, 인덱스 최소화, 배치 처리
UPDATE 불필요한 컬럼 수정, 인덱스 부하 필요한 컬럼만 수정, 병렬 처리
DELETE  인덱스/제약조건 부하, 로그 발생 TRUNCATE, 배치 삭제, 파티션 활용

DML 튜닝은 단순히 SQL문을 바꾸는 것이 아니라, 데이터 구조, 인덱스, 트랜잭션 전략까지 함께 고려해야 합니다. 특히 대량 작업 시 배치 처리 + Direct Path + 인덱스 최소화를 조합하면 성능을 크게 향상시킬 수 있습니다.