본문 바로가기
Database/Oracle

[ORACLE] DBA_FREE_SPACE 완벽 가이드 : 테이블스페이스의 여유 공간과 효율적인 공간 관리 전략

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

DBA_FREE_SPACE
[ORACLE] DBA_FREE_SPACE

 

Oracle Database에서 DBA_FREE_SPACE 뷰는 데이터베이스 내에서 사용되지 않은 공간(Free Space)에 대한 정보를 제공하는 중요한 시스템 뷰입니다. 이 뷰는 각 테이블스페이스의 남은 공간, 데이터파일의 여유 블록 범위, Extent 단위의 빈 공간을 조회하는 데 사용됩니다. 즉, DBA_FREE_SPACE“현재 데이터베이스에서 얼마나 많은 여유 공간이 있으며, 어느 파일의 어느 위치에 존재하는가”를 보여주는 필수적인 DBA 도구입니다. 이 뷰는 DBA_EXTENTS와 상호 보완적인 역할을 수행합니다. DBA_EXTENTS가 이미 할당된 공간(Used Space)을 관리한다면, DBA_FREE_SPACE는 아직 사용되지 않은 공간(Unused Space)을 관리하여, 전체 테이블스페이스의 공간 구조를 완전히 이해할 수 있도록 돕습니다.


1. DBA_FREE_SPACE 개요

Oracle 데이터베이스는 테이블스페이스(Tablespace)를 단위로 데이터를 저장하며, 각 테이블스페이스는 하나 이상의 데이터파일(Datafile)로 구성됩니다. 이때 각 데이터파일은 Extent 단위로 공간이 관리되며, 사용되지 않은 영역은 DBA_FREE_SPACE 뷰에 기록됩니다. 따라서 DBA_FREE_SPACE는 데이터파일별로 남아 있는 Free Extent 정보를 보여주는 시스템 뷰로, DBA가 공간 확장, 리밸런싱(Rebalancing), 또는 테이블스페이스 추가를 판단할 때 반드시 참고해야 할 자료입니다.


2. DBA_FREE_SPACE의 주요 역할

  • 테이블스페이스 내의 남은 공간 확인
  • 데이터파일별 Free 블록(Extent) 범위 조회
  • 공간 단편화(Fragmentation) 진단
  • 공간 부족 시 확장 계획 수립
  • 자동 확장(AUTOEXTEND) 및 스토리지 관리 정책 검증

3. 주요 컬럼 설명

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

컬럼명 데이터 타입 설명
TABLESPACE_NAME VARCHAR2 Free Space가 존재하는 테이블스페이스 이름
FILE_ID NUMBER Free Extent가 속한 데이터파일 ID
BLOCK_ID NUMBER 해당 Free Extent의 시작 블록 번호
BYTES NUMBER Free Extent의 크기 (바이트 단위)
BLOCKS NUMBER Free Extent가 차지하는 블록 수
RELATIVE_FNO NUMBER 데이터파일의 상대 번호(Relative File Number)

이 컬럼들은 테이블스페이스 내의 남은 Extent의 위치, 크기, 블록 수를 구체적으로 나타냅니다. DBA는 이 데이터를 기반으로 공간 단편화 여부를 판단하거나, 필요한 경우 COALESCE 명령을 통해 Free Extent를 병합할 수 있습니다.


4. DBA_FREE_SPACE 조회 예제

① 테이블스페이스별 여유 공간 확인


SELECT 
    TABLESPACE_NAME,
    ROUND(SUM(BYTES)/1024/1024, 2) AS FREE_MB
FROM 
    DBA_FREE_SPACE
GROUP BY 
    TABLESPACE_NAME
ORDER BY 
    FREE_MB DESC;

이 쿼리는 각 테이블스페이스의 총 여유 공간을 MB 단위로 보여줍니다. DBA는 이를 활용하여 공간 부족이 예상되는 테이블스페이스를 신속하게 파악할 수 있습니다.

② 데이터파일별 남은 공간 조회


SELECT 
    FILE_ID,
    ROUND(SUM(BYTES)/1024/1024, 2) AS FREE_MB,
    COUNT(*) AS EXTENT_COUNT
FROM 
    DBA_FREE_SPACE
GROUP BY 
    FILE_ID
ORDER BY 
    FILE_ID;

데이터파일별로 여유 공간 크기와 Extent 개수를 확인함으로써 파일 간 공간 불균형이나 특정 파일의 과도한 단편화 여부를 파악할 수 있습니다.

③ 가장 큰 Free Extent 확인


SELECT 
    TABLESPACE_NAME,
    MAX(BYTES)/1024/1024 AS LARGEST_FREE_MB
FROM 
    DBA_FREE_SPACE
GROUP BY 
    TABLESPACE_NAME;

이 쿼리는 각 테이블스페이스에서 가장 큰 단일 Free Extent 크기를 조회합니다. 이는 대용량 테이블이나 인덱스 생성 시 공간 부족 오류를 방지하는 데 매우 유용합니다.


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

다음 표는 DBA_FREE_SPACE와 함께 사용되는 주요 공간 관리 관련 뷰들의 특징을 비교한 것입니다.

뷰 이름 역할 DBA_FREE_SPACE와의 관계
DBA_FREE_SPACE 테이블스페이스의 Free Extent 정보 제공 실제 사용되지 않은 공간을 표시
DBA_EXTENTS 할당된 Extent(사용 중 공간) 정보 제공 DBA_FREE_SPACE의 반대 개념
DBA_SEGMENTS 세그먼트별 공간 요약 정보 DBA_EXTENTS의 집계 결과
DBA_DATA_FILES 데이터파일의 전체 용량 정보 DBA_FREE_SPACE와 결합해 사용률 계산 가능

6. DBA_FREE_SPACE 활용 사례

① 테이블스페이스 공간 부족 모니터링

DBA_FREE_SPACE를 이용하면 주기적으로 여유 공간을 점검하여 자동 확장이 설정되지 않은 테이블스페이스에서 공간 부족으로 인한 에러를 사전에 예방할 수 있습니다.


SELECT 
    TABLESPACE_NAME,
    ROUND(SUM(BYTES)/1024/1024, 2) AS FREE_MB
FROM 
    DBA_FREE_SPACE
GROUP BY 
    TABLESPACE_NAME
HAVING 
    SUM(BYTES)/1024/1024 < 500;

이 쿼리는 여유 공간이 500MB 미만인 테이블스페이스를 찾아냅니다. DBA는 결과를 바탕으로 공간 확장 또는 불필요한 세그먼트 정리를 수행할 수 있습니다.

② 공간 단편화(Fragmentation) 진단

Free Extent가 지나치게 많이 나뉘어 있으면 대형 객체 생성 시 공간 부족 오류가 발생할 수 있습니다. 다음 쿼리를 통해 단편화 정도를 파악할 수 있습니다.


SELECT 
    TABLESPACE_NAME,
    COUNT(*) AS FREE_EXTENTS,
    MAX(BYTES)/1024/1024 AS MAX_FREE_MB,
    SUM(BYTES)/1024/1024 AS TOTAL_FREE_MB
FROM 
    DBA_FREE_SPACE
GROUP BY 
    TABLESPACE_NAME
ORDER BY 
    FREE_EXTENTS DESC;

Free Extent 수가 많고 최대 크기가 작다면 단편화가 심한 상태로 판단할 수 있습니다. 이 경우 ALTER TABLESPACE COALESCE 명령을 통해 공간을 병합하는 것이 좋습니다.

③ COALESCE를 통한 공간 병합


ALTER TABLESPACE USERS COALESCE;

이 명령은 인접한 Free Extent들을 하나의 큰 Extent로 병합하여, 단편화된 공간을 효율적으로 통합합니다.


7. DBA_FREE_SPACE와 LMT(Local Managed Tablespace)의 관계

Oracle 9i 이후 버전부터는 대부분의 테이블스페이스가 Locally Managed Tablespace (LMT)로 관리됩니다. LMT는 비트맵(Bitmap)을 이용해 Extent 상태(Free/Used)를 내부적으로 관리하지만, DBA_FREE_SPACE 뷰는 여전히 이 정보를 조회할 수 있도록 외부에 제공합니다. 즉, LMT 환경에서도 DBA_FREE_SPACE는 읽기 전용 메타 데이터 뷰로 남아 있으며, 공간 관리 정책이 자동화되었더라도 DBA는 이 뷰를 통해 정확한 Free Space 정보를 확인할 수 있습니다.


8. DBA_FREE_SPACE 기반 테이블스페이스 사용률 계산

아래 쿼리를 이용하면 각 테이블스페이스의 전체 용량 대비 사용률을 한 번에 계산할 수 있습니다.


SELECT 
    a.TABLESPACE_NAME,
    ROUND((a.TOTAL_SPACE - b.FREE_SPACE)/a.TOTAL_SPACE * 100, 2) AS USED_PERCENT,
    ROUND(b.FREE_SPACE, 2) AS FREE_MB,
    ROUND(a.TOTAL_SPACE, 2) AS TOTAL_MB
FROM 
    (SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 AS TOTAL_SPACE 
     FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) a
JOIN 
    (SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 AS FREE_SPACE 
     FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) b
ON 
    a.TABLESPACE_NAME = b.TABLESPACE_NAME
ORDER BY 
    USED_PERCENT DESC;

이 결과는 각 테이블스페이스의 전체 크기, 여유 공간, 사용률(%)을 한눈에 보여줍니다. 운영 환경에서는 이 정보를 주기적으로 리포팅하여, 공간이 임계 수준에 도달하기 전에 확장 작업을 계획할 수 있습니다.


9. DBA_FREE_SPACE와 DBA_EXTENTS 비교 요약

항목 DBA_FREE_SPACE DBA_EXTENTS
역할 할당되지 않은 Free Extent 정보 이미 사용 중인 Extent 정보
데이터 소스 Free Space 비트맵 또는 딕셔너리 UET$ (Used Extent Table)
활용 목적 공간 부족 진단, 단편화 확인 세그먼트별 공간 분포 분석
주요 컬럼 TABLESPACE_NAME, FILE_ID, BYTES, BLOCKS OWNER, SEGMENT_NAME, BLOCK_ID, BLOCKS
적용 대상 Free 공간 Used 공간
사용 빈도 공간 관리, 용량 점검 시 세그먼트 단위 분석 시

10. 결론

DBA_FREE_SPACE는 Oracle 데이터베이스의 공간 활용도를 실시간으로 모니터링하고, 단편화 및 공간 부족 문제를 예방하기 위한 핵심 뷰입니다. 이 뷰를 통해 DBA는 각 테이블스페이스의 Free Space를 정확히 파악할 수 있으며, 공간 확장 및 재구성을 사전에 계획할 수 있습니다. 특히 DBA_EXTENTS와 함께 사용하면 테이블스페이스 전체의 공간 구조를 입체적으로 이해할 수 있으며, 대규모 데이터베이스 운영 환경에서 성능 저하 없이 안정적인 스토리지 관리를 실현할 수 있습니다.


출처

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