본문 바로가기
Database/Oracle

[ORACLE] DBA_EXTENTS 완벽 가이드 : 테이블스페이스 공간 사용 현황을 정확히 파악하는 방법

by Papa Martino V 2025. 10. 14.
728x90

DBA_EXTENTS
[ORACLE] DBA_EXTENTS

 

Oracle Database에서 DBA_EXTENTS 뷰는 데이터베이스 내에서 실제로 사용 중인 공간(Extent)의 상세 정보를 제공하는 핵심적인 시스템 뷰입니다. 이 뷰는 각 세그먼트(Segment)가 차지하고 있는 Extent의 위치, 크기, 파일 번호, 블록 번호 등을 보여주며, 공간 관리, 성능 최적화, 테이블스페이스 용량 모니터링 등 다양한 DBA 업무에서 필수적으로 활용됩니다.

즉, DBA_EXTENTS는 "현재 데이터베이스에서 어떤 객체가 어떤 파일의 어느 영역을 사용 중인가?"를 명확하게 알려주는 저수준(physical-level) 공간 분석 도구입니다.


1. DBA_EXTENTS 개요

Oracle 데이터베이스의 저장 구조는 테이블스페이스(Tablespace)데이터파일(Datafile)ExtentBlock 계층으로 구성됩니다. 이 중 Extent는 실제 데이터가 저장되는 최소 공간 단위로, 세그먼트가 성장할 때마다 새로운 Extent가 할당됩니다.

DBA_EXTENTS 뷰는 이 Extent 단위의 정보를 테이블 형태로 저장하여, 각 세그먼트별 공간 점유 현황을 모니터링할 수 있도록 합니다. 특히, DBA_SEGMENTS가 세그먼트별 요약 정보를 제공한다면, DBA_EXTENTS는 그보다 세밀한 세그먼트 내부의 물리적 블록 단위 정보를 제공합니다.


2. DBA_EXTENTS의 주요 역할

  • 세그먼트(테이블, 인덱스 등)의 실제 저장 위치 파악
  • 테이블스페이스 및 데이터파일별 공간 사용 현황 분석
  • 공간 단편화(Fragmentation) 분석
  • 비정상적인 Extent 할당(예: 중복, 과도한 분할) 점검
  • 데이터 파일 용량 재구성 또는 압축 작업 시 기초 데이터로 활용

3. 주요 컬럼 설명

아래 표는 DBA_EXTENTS 뷰의 주요 컬럼과 그 의미를 정리한 것입니다.

컬럼명 데이터 타입 설명
OWNER VARCHAR2 세그먼트를 소유한 스키마 이름
SEGMENT_NAME VARCHAR2 세그먼트 이름 (예: TABLE 또는 INDEX 이름)
SEGMENT_TYPE VARCHAR2 세그먼트 유형 (TABLE, INDEX, CLUSTER 등)
TABLESPACE_NAME VARCHAR2 세그먼트가 속한 테이블스페이스 이름
FILE_ID NUMBER Extent가 속한 데이터파일 ID
BLOCK_ID NUMBER Extent의 시작 블록 번호
BLOCKS NUMBER Extent가 차지하는 블록 수
BYTES NUMBER Extent의 크기 (Byte 단위)

이 컬럼들을 통해 DBA는 각 세그먼트의 공간 분포를 세밀하게 분석할 수 있으며, 특정 테이블이나 인덱스가 데이터파일의 어느 구간을 점유하고 있는지까지 정확히 추적할 수 있습니다.


4. DBA_EXTENTS 조회 예제

① 특정 테이블의 Extent 정보 확인


SELECT 
    TABLESPACE_NAME,
    FILE_ID,
    BLOCK_ID,
    BYTES,
    BLOCKS
FROM 
    DBA_EXTENTS
WHERE 
    SEGMENT_NAME = 'EMPLOYEES'
    AND OWNER = 'HR'
ORDER BY FILE_ID, BLOCK_ID;

이 쿼리는 HR 스키마의 EMPLOYEES 테이블이 실제로 어떤 데이터파일, 어떤 블록 범위에 저장되어 있는지를 보여줍니다.

② 테이블스페이스별 공간 사용량 집계


SELECT 
    TABLESPACE_NAME,
    SUM(BYTES)/1024/1024 AS USED_MB
FROM 
    DBA_EXTENTS
GROUP BY 
    TABLESPACE_NAME
ORDER BY 
    USED_MB DESC;

이 쿼리를 통해 각 테이블스페이스가 실제로 얼마나 많은 공간을 사용하고 있는지 (MB 단위로) 집계된 결과를 얻을 수 있습니다.

③ 특정 데이터파일의 Extent 분포 분석


SELECT 
    FILE_ID,
    COUNT(*) AS EXTENT_COUNT,
    SUM(BYTES)/1024/1024 AS TOTAL_MB
FROM 
    DBA_EXTENTS
GROUP BY 
    FILE_ID
ORDER BY 
    FILE_ID;

이 쿼리는 데이터파일별로 얼마나 많은 Extent가 존재하며, 총 얼마나 많은 공간을 차지하고 있는지를 보여줍니다. 이 정보를 바탕으로 파일별 I/O 부하나 Fragmentation 문제를 진단할 수 있습니다.


5. DBA_EXTENTS와 관련된 주요 뷰 비교

Oracle은 공간 관리와 관련하여 다양한 데이터 사전 뷰를 제공합니다. 아래 표는 그 중 DBA_EXTENTS와 관련성이 높은 뷰들의 특징을 비교한 것입니다.

뷰 이름 역할 DBA_EXTENTS와의 관계
DBA_EXTENTS 사용 중인 Extent 정보 세그먼트가 점유 중인 물리적 공간 표시
DBA_FREE_SPACE 할당되지 않은 Free Extent 정보 DBA_EXTENTS의 반대 개념으로, 아직 사용되지 않은 공간 표시
DBA_SEGMENTS 세그먼트별 공간 요약 DBA_EXTENTS의 데이터를 집계한 결과
DBA_DATA_FILES 데이터파일 메타정보 (경로, 크기, ID 등) DBA_EXTENTS의 FILE_ID 컬럼과 직접 연결

6. DBA_EXTENTS를 활용한 공간 분석 실무 예제

① 세그먼트 단편화 분석

테이블이 많은 Extent로 나뉘어 있을수록, 해당 세그먼트는 단편화되어 있을 가능성이 높습니다. 다음 쿼리를 통해 Extent가 많은 테이블을 확인할 수 있습니다.


SELECT 
    OWNER, SEGMENT_NAME, COUNT(*) AS EXTENT_COUNT
FROM 
    DBA_EXTENTS
GROUP BY 
    OWNER, SEGMENT_NAME
HAVING 
    COUNT(*) > 100
ORDER BY 
    EXTENT_COUNT DESC;

이 결과를 기반으로 ALTER TABLE MOVE 명령이나 SHRINK SPACE 명령을 수행하여 공간 효율성을 높일 수 있습니다.

② 특정 테이블의 물리적 저장 경로 추적


SELECT 
    FILE_ID,
    BLOCK_ID,
    BLOCKS,
    TABLESPACE_NAME
FROM 
    DBA_EXTENTS
WHERE 
    OWNER = 'HR'
    AND SEGMENT_NAME = 'DEPARTMENTS';

이 쿼리는 DEPARTMENTS 테이블이 실제 어떤 블록 범위에 저장되어 있는지를 보여줍니다. 데이터 복구나 I/O 분산 설계 시 유용하게 활용됩니다.

③ 특정 테이블스페이스의 세그먼트 분포 확인


SELECT 
    TABLESPACE_NAME,
    SEGMENT_TYPE,
    COUNT(DISTINCT SEGMENT_NAME) AS SEGMENT_COUNT,
    SUM(BYTES)/1024/1024 AS USED_MB
FROM 
    DBA_EXTENTS
GROUP BY 
    TABLESPACE_NAME, SEGMENT_TYPE
ORDER BY 
    USED_MB DESC;

이 결과는 테이블스페이스 내에서 어떤 유형의 객체(TABLE, INDEX 등)가 얼마나 많은 공간을 사용하는지를 한눈에 보여줍니다.


7. DBA_EXTENTS 기반 테이블스페이스 공간 모니터링

운영 환경에서는 주기적으로 DBA_EXTENTS를 활용하여 테이블스페이스별 공간 사용률을 점검해야 합니다. 아래 예제는 전체 테이블스페이스의 총 크기 대비 사용량을 계산하는 방식입니다.


SELECT 
    a.TABLESPACE_NAME,
    ROUND(SUM(b.BYTES)/1024/1024, 2) AS USED_MB,
    ROUND(SUM(a.BYTES)/1024/1024, 2) AS TOTAL_MB,
    ROUND((SUM(b.BYTES)/SUM(a.BYTES))*100, 2) AS USED_PERCENT
FROM 
    DBA_DATA_FILES a
JOIN 
    DBA_EXTENTS b
ON 
    a.FILE_ID = b.FILE_ID
GROUP BY 
    a.TABLESPACE_NAME
ORDER BY 
    USED_PERCENT DESC;

이 쿼리는 각 테이블스페이스의 총 크기와 실제 사용 중인 크기, 그리고 사용률(%)을 함께 보여줍니다. 이 정보를 통해 DBA는 공간 부족 위험을 사전에 예측할 수 있습니다.


8. DBA_EXTENTS와 LMT(Local Managed Tablespace)의 관계

Oracle 9i 이후부터는 Locally Managed Tablespace (LMT)가 기본 구조로 채택되었습니다. LMT 환경에서는 Extent 관리가 데이터 딕셔너리가 아닌 데이터파일 내부의 비트맵(Bitmap)에 의해 자동으로 수행됩니다. 그럼에도 불구하고 DBA_EXTENTS는 여전히 LMT의 공간 상태를 조회하는 표준 뷰로 유지되고 있으며, 비트맵에서 읽은 Extent 정보를 DBA에게 가시적으로 보여주는 역할을 합니다. 따라서 DMT(Dictionary Managed Tablespace)가 사라진 이후에도 DBA_EXTENTS는 모든 Oracle 버전에서 필수적인 뷰로 남아 있습니다.


9. 요약 비교표

항목 DBA_EXTENTS DBA_FREE_SPACE
역할 사용 중인 Extent 정보 제공 할당되지 않은 Free 공간 정보 제공
데이터 소스 세그먼트(테이블, 인덱스 등) 비할당 블록 영역
활용 목적 공간 사용 분석, I/O 최적화 공간 확장 또는 리밸런싱 계획 수립
관련 뷰 DBA_SEGMENTS, DBA_DATA_FILES DBA_TABLESPACES, DBA_TEMP_FREE_SPACE

10. 결론

DBA_EXTENTS는 Oracle 데이터베이스의 공간 관리 및 성능 최적화에서 가장 핵심적인 역할을 담당하는 뷰입니다. 이 뷰를 활용하면 세그먼트의 실제 저장 구조를 명확히 파악할 수 있으며, 공간 사용률, 단편화, 파일별 부하 등 물리적 구조적 이슈를 조기에 감지할 수 있습니다. 특히 대규모 시스템이나 고성능 OLTP 환경에서는 DBA_EXTENTS 분석 결과를 기반으로 테이블스페이스 리밸런싱, 파티션 설계, 데이터파일 분산 전략 등을 세우면 성능과 안정성을 동시에 확보할 수 있습니다.


출처

  • Oracle Database Reference 19c – DBA_EXTENTS View
  • Oracle Concepts Guide – Space Management in Tablespaces
  • Oracle Administrator’s Guide – Managing Database Storage Structures
728x90