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. 성능 튜닝 실전 팁
- 먼저
DBMS_STATS.GATHER_TABLE_STATS로 파티션 통계를 수집합니다. ALL_PART_HISTOGRAMS를 통해 분포 확인 후, 불균형한 컬럼에 대해FOR COLUMNS SIZE SKEWONLY로 히스토그램을 재수집합니다.- 자주 사용되는 쿼리의 실행 계획을 확인하여 히스토그램 적용 전후 성능 차이를 분석합니다.
8. 결론
오라클의 ALL_PART_HISTOGRAMS 뷰는 데이터 분포를 정밀하게 파악하고 쿼리 성능을 높이기 위한 중요한 도구입니다. 특히 대용량 파티션 테이블 환경에서는 파티션 단위의 통계 정보 분석이 필요하며, 이 뷰를 활용하면 보다 정교한 성능 튜닝이 가능합니다. 실무에서 이 정보를 전략적으로 사용한다면, 옵티마이저가 더욱 정확한 실행 계획을 수립할 수 있게 되어 시스템 전반의 효율성 향상에 기여할 수 있습니다.
9. 참고 자료
- Oracle Database Documentation 21c - ALL_PART_HISTOGRAMS
- Oracle Optimizer Blog - https://blogs.oracle.com/optimizer/
- Oracle Performance Tuning Guide
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] ALL_PART_KEY_COLUMNS 뷰의 개념과 실무 활용 법 (0) | 2025.06.27 |
|---|---|
| [ORACLE] ALL_PART_INDEXES 뷰 완전 이해하기 (0) | 2025.06.26 |
| [ORACLE] ALL_PART_COL_STATISTICS 뷰 완전 해석 : 파티션 컬럼 통계를 활용한 SQL 성능 최적화 (0) | 2025.06.26 |
| [ORACLE] ALL_PARTIAL_DROP_TABS 뷰 완전 분석 : 파티션 테이블 삭제 추적 가이드 (0) | 2025.06.26 |
| [ORACLE] ALL_OPBINDINGS 뷰 완벽 가이드 : 바인드 변수 추적의 핵심 (0) | 2025.06.26 |