본문 바로가기
Oracle

[ORACLE] FULL 완전 정복 : 최적화의 강력한 무기

by Dev. Orion 2025. 7. 6.
728x90
반응형

FULL 완전 정복 : 최적화의 강력한 무기
[ORACLE] FULL

 

SQL 튜닝을 고민하는 데이터베이스 개발자나 DBA라면 한 번쯤 들어본 ORACLE의 FULL 힌트. 하지만 단순히 '인덱스를 무시하고 전체 테이블 스캔을 강제하는 힌트'라는 설명만으로는 부족합니다. 이 글에서는 FULL 힌트의 개념부터 내부 동작 방식, 실무 적용 사례, 그리고 주의할 점까지 깊이 있게 파헤쳐 보겠습니다. 이 글은 국내외 실무 사례와 최신 Oracle 문서(출처: Oracle Database SQL Tuning Guide, Oracle White Papers)를 기반으로 작성되었습니다.

1. ORACLE FULL 힌트란 무엇인가?

FULL 힌트는 Oracle Optimizer에게 특정 테이블에 대해 Full Table Scan을 강제로 수행하도록 지시하는 힌트입니다. 일반적으로 옵티마이저는 비용 기반 분석(CBO, Cost-Based Optimizer)을 통해 인덱스 스캔 또는 테이블 스캔을 자동으로 선택하지만, 사용자가 FULL 힌트를 명시하면 인덱스를 무시하고 전체 데이터를 순차적으로 읽습니다.

1-1. 왜 FULL 힌트를 사용할까?

인덱스가 존재해도 다음과 같은 경우 FULL 힌트 사용이 효과적일 수 있습니다.

  • 대량의 데이터를 처리할 때
  • 대부분의 행을 읽어야 할 때
  • 인덱스가 지나치게 조각화되어 있는 경우
  • 병렬 처리(Parallel Query)와 결합해 전체 테이블을 한 번에 읽고자 할 때

2. FULL 힌트의 내부 동작 방식

FULL 힌트를 사용하면 Oracle은 테이블의 모든 블록을 순차적으로 읽어옵니다. 이러한 방식은 다음과 같은 특징이 있습니다.

  1. 멀티블록 읽기(Multi-block read): 여러 블록을 한 번에 읽어 I/O 효율을 높임
  2. 버퍼 캐시 활용: 자주 액세스되는 블록을 캐시에 보관
  3. DB File Sequential Read가 아닌 DB File Scattered Read 발생: 이는 Full Table Scan의 대표적인 Wait Event입니다

3. FULL 힌트와 인덱스 스캔 비교

구분 FULL 힌트(Full Table Scan) 인덱스 스캔(Index Scan)
읽기 범위 전체 테이블 필요한 데이터 블록만
I/O 비용 대량 데이터에 유리 소량 데이터에 유리
캐시 적중률 낮음 (일시적) 높음
병렬 처리 적용 가능 제한적
적합 시나리오 대량 데이터 집계 빠른 단건 조회

4. 실전 예제: FULL 힌트 사용법

다음 예제는 고객 테이블(CUSTOMERS)에서 전체 데이터를 조회하는 SQL입니다.

SELECT /*+ FULL(C) */ *
FROM CUSTOMERS C
WHERE C.STATUS = 'ACTIVE';

위 쿼리는 인덱스가 존재하더라도 무조건 Full Table Scan을 사용하게 됩니다. 특히 병렬 처리 힌트와 결합하면 대용량 데이터 분석 성능을 극적으로 향상할 수 있습니다.

5. FULL 힌트 사용 시 주의사항

  • 쿼리 실행 계획을 꼭 확인할 것 (EXPLAIN PLAN 또는 AUTOTRACE 사용)
  • OLTP 환경에서는 주의 필요 (대량의 I/O가 발생하여 다른 세션에 영향)
  • 테이블 통계 정보가 최신인지 점검 (CBO의 정확한 판단을 위해 필수)
  • 테스트 환경과 운영 환경의 데이터 규모 차이를 반드시 고려

6. FULL 힌트의 실무 활용 전략

FULL 힌트는 단순히 '느린 방식'이 아니라, 적절한 시점에 사용하면 최강의 무기가 됩니다. 특히 다음과 같은 상황에서 빛을 발합니다.

  1. 인덱스가 지나치게 많은 조인 쿼리에서 불필요한 랜덤 I/O 제거
  2. 대규모 배치 처리 또는 데이터 마이그레이션 작업
  3. 집계, 통계 분석을 위한 대용량 테이블 스캔

하지만, 모든 상황에서 만능은 아닙니다. 최종적으로는 실행 계획과 시스템 리소스를 함께 고려하여 판단하는 것이 중요합니다.

7. 결론

FULL 힌트는 오해받기 쉬운 힌트 중 하나입니다. "무조건 느리다", "인덱스를 무시하니 무조건 나쁘다"라는 고정관념에서 벗어나, 정확한 데이터 분석과 테스트를 기반으로 활용하면 오히려 성능을 획기적으로 개선할 수 있습니다. 오늘 소개한 내용을 참고해 현업에 직접 적용해보고, 적재적소에 FULL 힌트를 활용하여 한층 더 효율적인 데이터베이스 운영을 경험해보시길 바랍니다.

출처

728x90
반응형