기술 정보
home
채널 소개
home

DBMS_SPACE 테이블 공간 사용량 분석 방법 (SPACE_USAGE)

문서 유형
기술 정보
분야
모니터링/점검
키워드
DBMS_SPACE
SPACE_USAGE
1 more property

개요

본 문서에서는 DBMS_SPACE 패키지 중 SPACE_USAGE 쿼리를 통해 테이블 공간 사용량 분석 방법을 안내합니다.
SPACE_USAGE 쿼리는 세그먼트의 High Water Mark(이하 HWM) 아래의 공간을 의미하며, 즉 현재 사용하는 공간에 대한 정보를 확인할 수 있는 쿼리입니다.

방법

SPACE_USAGE 쿼리 사용 방법

SQL> set serveroutput on declare l_tabname varchar2(30) := '테이블명'; l_fs1_bytes number; l_fs2_bytes number; l_fs3_bytes number; l_fs4_bytes number; l_fs1_blocks number; l_fs2_blocks number; l_fs3_blocks number; l_fs4_blocks number; l_full_bytes number; l_full_blocks number; l_unformatted_bytes number; l_unformatted_blocks number; begin dbms_space.space_usage( segment_owner => user, segment_name => l_tabname, segment_type => 'TABLE', fs1_bytes => l_fs1_bytes, fs1_blocks => l_fs1_blocks, fs2_bytes => l_fs2_bytes, fs2_blocks => l_fs2_blocks, fs3_bytes => l_fs3_bytes, fs3_blocks => l_fs3_blocks, fs4_bytes => l_fs4_bytes, fs4_blocks => l_fs4_blocks, full_bytes => l_full_bytes, full_blocks => l_full_blocks, unformatted_blocks => l_unformatted_blocks, unformatted_bytes => l_unformatted_bytes ); dbms_output.put_line('0-25% Free = '||l_fs1_blocks||' Bytes = '||l_fs1_bytes); dbms_output.put_line('25-50% Free = '||l_fs2_blocks||' Bytes = '||l_fs2_bytes); dbms_output.put_line('50-75% Free = '||l_fs3_blocks||' Bytes = '||l_fs3_bytes); dbms_output.put_line('75-100% Free = '||l_fs4_blocks||' Bytes = '||l_fs4_bytes); dbms_output.put_line('Full Blocks = '||l_full_blocks||' Bytes = '||l_full_bytes); dbms_output.put_line('Unformatted Blocks = '||l_unformatted_blocks||' Bytes = '||l_unformatted_bytes); end; / set serveroutput off
SQL
복사

SPACE_USAGE 사용 후 결과 분석 예시

아래와 같이, 개발 쪽 테이블은 총 58블록을 사용하고 있고, 운용 쪽은 총49924블록을 사용하고 있습니다.
즉, 개발과 운영 환경의 데이터 건수 차이는 크지 않았으나, 블록 사용량 차이로 인해 풀스캔 수행 시간에서 큰 차이가 발생한 것을 확인할 수 있습니다.

개발 환경 결과 (sqltrace 발췌)

0-25% Free = 46 Bytes = 376832 25-50% Free = 0 Bytes = 0 50-75% Free = 1 Bytes = 8192 75-100% Free = 11 Bytes = 90112 Full Blocks = 0 Bytes = 0 Unformatted Blocks = 0 Bytes = 0 table access (full) 테이블명(40938) (et=302, cr=59, cu=4, co=26, cpu=0, ro=5000)
SQL
복사

운영 환경 결과 (sqltrace 발췌)

0-25% Free = 32 Bytes = 262144 25-50% Free = 1 Bytes = 8192 50-75% Free = 0 Bytes = 0 75-100% Free = 49877 Bytes = 408592384 Full Blocks = 14 Bytes = 114688 Unformatted Blocks = 0 Bytes = 0 table access (full) 테이블명(40905) (et=191878, cr=49925, cu=112, co=20760, cpu=0, ro=5275)
SQL
복사

SPACE_USAGE 분석 및 해결 방안

테이블을 풀스캔하는 경우, 테이블에 할당된 블록(high water mark 이전 블록)을 모두 읽어들이기 때문에 처리하는 시간에 차이가 많이 나는 것으로 보일 수 있습니다.
위와 같은 상황에서 간단한 해결 방법으로 데이터를 백업한 뒤 테이블을 DROP 후 재생성하는 작업이 필요합니다.