본문 바로가기
Database/Oracle

[ORACLE] ALL_PART_HISTOGRAMS 뷰 완전 정복

by Papa Martino V 2025. 6. 26.
728x90

1. ALL_PART_HISTOGRAMS란 무엇인가?

ALL_PART_HISTOGRAMS는 오라클 데이터베이스에서 파티션 테이블 또는 서브파티션 테이블에 대한 히스토그램 통계를 확인할 수 있는 딕셔너리 뷰입니다. 히스토그램은 컬럼의 데이터 분포를 세분화하여 옵티마이저가 좀 더 정밀하게 실행 계획을 선택할 수 있게 도와줍니다. 특히 데이터가 불균형적으로 분포되어 있을 때 효율적인 쿼리 성능을 보장하기 위해 필수적인 요소입니다.

2. 주요 컬럼 설명

ALL_PART_HISTOGRAMS의 주요 컬럼은 아래와 같습니다.

컬럼명 설명
OWNER 해당 객체의 소유자
TABLE_NAME 테이블명
PARTITION_NAME 해당 파티션 이름
COLUMN_NAME 히스토그램이 적용된 컬럼명
ENDPOINT_NUMBER 히스토그램 구간 번호
ENDPOINT_VALUE 각 구간의 종료 값
ENDPOINT_ACTUAL_VALUE 가독성 높은 실제 종료 값

3. 사용 목적과 필요성

히스토그램은 옵티마이저가 특정 컬럼의 값 분포를 판단하여 더 효율적인 인덱스 사용 여부를 결정할 수 있게 합니다. 특히 파티션된 테이블에서는 파티션 별로 데이터 분포가 다를 수 있으므로, ALL_PART_HISTOGRAMS 뷰를 통해 파티션 단위 통계 분석이 중요합니다.

4. 활용 예제

다음은 특정 파티션에서 특정 컬럼의 히스토그램 정보를 조회하는 SQL 예제입니다.


SELECT
  table_name,
  partition_name,
  column_name,
  endpoint_number,
  endpoint_value,
  endpoint_actual_value
FROM
  all_part_histograms
WHERE
  table_name = 'SALES'
  AND column_name = 'REGION_ID'
  AND partition_name = 'P202406';
      

이 쿼리를 통해 REGION_ID 컬럼의 값이 어떻게 분포되어 있는지를 시각화하거나 분석할 수 있습니다.

5. 히스토그램 타입별 비교

구분 FREQUENCY HEIGHT BALANCED TOP-FREQUENCY HYBRID
특징 데이터 값별 발생 빈도 저장 동일한 건수를 가진 구간으로 분할 자주 등장하는 값만 저장 복합 방식 (AUTO + TOP)
적합한 경우 데이터 분포가 불균형할 때 일정하게 분포된 경우 일부 값만 자주 나올 때 자동 통계 수집 환경
기능 정확한 옵티마이저 판단 단순 예측 가능 빈도 높은 값 위주 튜닝 최적의 판단 자동 적용

6. 통계 수집 시 주의사항

  • 히스토그램은 너무 많이 생성되면 SQL 계획이 불안정해질 수 있으므로 신중하게 사용해야 합니다.
  • 파티션 별로 분포가 크게 다를 경우, 파티션 단위로 통계를 수집해야 더 정밀한 성능 개선이 가능합니다.
  • 자동 통계 수집 기능을 사용하고 있다면 method_opt 파라미터 설정을 통해 히스토그램 수집 범위를 조절할 수 있습니다.

7. 성능 튜닝 실전 팁

  1. 먼저 DBMS_STATS.GATHER_TABLE_STATS로 파티션 통계를 수집합니다.
  2. ALL_PART_HISTOGRAMS를 통해 분포 확인 후, 불균형한 컬럼에 대해 FOR COLUMNS SIZE SKEWONLY로 히스토그램을 재수집합니다.
  3. 자주 사용되는 쿼리의 실행 계획을 확인하여 히스토그램 적용 전후 성능 차이를 분석합니다.

8. 결론

오라클의 ALL_PART_HISTOGRAMS 뷰는 데이터 분포를 정밀하게 파악하고 쿼리 성능을 높이기 위한 중요한 도구입니다. 특히 대용량 파티션 테이블 환경에서는 파티션 단위의 통계 정보 분석이 필요하며, 이 뷰를 활용하면 보다 정교한 성능 튜닝이 가능합니다. 실무에서 이 정보를 전략적으로 사용한다면, 옵티마이저가 더욱 정확한 실행 계획을 수립할 수 있게 되어 시스템 전반의 효율성 향상에 기여할 수 있습니다.

9. 참고 자료

728x90