SQL 튜닝 실전 경험: 대량 DML 작업 시 인덱스 병목 개선

seogideogi·2025년 5월 16일

DB

목록 보기
2/3

📌 SQL 튜닝 실전 경험: 대량 DML 작업 시 인덱스 병목 개선

■ 프로젝트 개요

  • 업무명: 연관 상품 추천 데이터 적재 성능 개선
  • 소속: 오픈마켓
  • DB: Oracle
  • 참여 기간: 약 1주
  • 역할: SQL 성능 개선 및 데이터 적재 구조 개선

■ 문제 상황

  • 하둡에서 생성된 연관 추천 상품 데이터를 Oracle로 이관하는 작업
  • 익스터널 테이블을 통해 파일을 읽고, 정규 테이블에 DML로 적재
  • 정규 테이블은 날짜 기반 파티셔닝(1/2 교차 사용) 구조
  • 특정 시점부터 DML이 8시간 이상 소요되며 프로세스가 지연

■ 원인 분석

  • 대상 테이블에 UNIQUE KEY 및 PRIMARY KEY 인덱스 설정되어 있었음
  • 데이터 량이 증가하면서, 인덱스 유지/검사 비용으로 인한 병목이 발생
  • 성능 분석 결과, DML 시점의 인덱스 재조정 비용이 병목 원인으로 판단

■ 수행 작업

순번조치 내용결과
1PK 제약조건 제거 후 DML성능 향상 미미
2PK 제약조건 + 인덱스 제거 후 DML성능 향상
3모든 제약조건 및 인덱스 제거 후 DML 수행, 이후 인덱스 재생성DML 시간: 8시간 → 1시간 이내 단축
  • 이후 작업부터는 DML 전 인덱스 제거 → DML → 인덱스 재생성 절차를 표준화

■ 주요 고려사항

  • SELECT 성능과 DML 성능 간의 트레이드오프에 대한 실무적 이해 확보
  • 인덱스 유지 비용은 대용량 배치에서 매우 큰 병목 요인이 될 수 있음
  • 인덱스는 반드시 "쿼리 성능"만을 위한 요소가 아니라 전체 데이터 흐름 관점에서 판단해야 함

■ 튜닝 후 효과

  • 데이터 적재 시간: 기존 8시간 → 약 55분으로 단축
  • 일일 배치 안정화 및 다음 단계 시스템 지연 제거
  • 이후 유사한 구조의 DML 대상 테이블에 동일한 전략 적용

■ 기타 경험 요약

  • 인덱스 생성은 쿼리 조건 패턴 분석을 기반으로 수행
  • 배치성 쿼리는 Full Scan을 유도하는 힌트를 적용하여 I/O 최적화
  • 불필요한 인덱스는 신중하게 판단 후 제거 (삭제는 거의 없음)
  • 성능 테스트 시 EXPLAIN PLAN 및 AWR 분석 활용

profile
한 줄 소개 하고 싶지 않아요.

0개의 댓글