(같은 사용자의 중간 판 4개는 보이지 않습니다) | |||
24번째 줄: | 24번째 줄: | ||
{{설명 | {{설명 | ||
| | |제목='''항목 설명''' | ||
* `blocks`: 테이블에 할당된 총 블록 수 | |||
* `empty_blocks`: 비워져 있는 블록(사용되지 않은 블록) 수 | |||
* `block_size`: 데이터베이스 블록 크기(보통 8192 Byte 등) | |||
* `used_bytes`: 실제 사용 중인 바이트 수 | |||
* `empty_bytes`: 비어 있는 바이트 수 | |||
}} | }} | ||
---- | |||
==== 테이블의 가용(재사용) 공간 확인 ==== | ==== 테이블의 가용(재사용) 공간 확인 ==== | ||
* Free space(재사용 가능 공간)를 구체적으로 보고 싶을 때: | * Free space(재사용 가능 공간)를 구체적으로 보고 싶을 때: | ||
37번째 줄: | 39번째 줄: | ||
# 세그먼트 기준 Free Space 확인 | # 세그먼트 기준 Free Space 확인 | ||
<source lang=sql> | #:<source lang=sql> | ||
SELECT | SELECT | ||
segment_name, | segment_name, | ||
50번째 줄: | 52번째 줄: | ||
#: | #: | ||
# 세그먼트 안의 FREE 영역, FRAGMENTATION 확인 | # 세그먼트 안의 FREE 영역, FRAGMENTATION 확인 | ||
#:<source lang=sql> | |||
<source lang=sql> | |||
SELECT | SELECT | ||
fs.file_id, | fs.file_id, |
2025년 7월 4일 (금) 15:57 기준 최신판
Oracle 테이블 사용공간 확인
- Oracle 19c에서 ASM(Automatic Storage Management)을 사용하는 환경에서 테이블의 "비워져 있는 공간(Free Space)" 및 "재사용 가능한 공간(Reclaimable/Reusable Space)" 확인
테이블이 사용하는 공간 확인
테이블이 점유한 전체, 사용 중, 비어 있는 공간 확인
- 현재 테이블의 전체 할당 공간, 사용 중인 공간, 비어 있는 공간(Free Space)을 볼 수 있습니다.
SELECT a.table_name, a.num_rows, a.blocks, a.empty_blocks, (a.blocks - a.empty_blocks) * b.block_size AS used_bytes, a.empty_blocks * b.block_size AS empty_bytes FROM user_tables a, (SELECT value AS block_size FROM v$parameter WHERE name = 'db_block_size') b WHERE a.table_name = '테이블명';
blur_on 항목 설명
- `blocks`: 테이블에 할당된 총 블록 수
- `empty_blocks`: 비워져 있는 블록(사용되지 않은 블록) 수
- `block_size`: 데이터베이스 블록 크기(보통 8192 Byte 등)
- `used_bytes`: 실제 사용 중인 바이트 수
- `empty_bytes`: 비어 있는 바이트 수
테이블의 가용(재사용) 공간 확인
- Free space(재사용 가능 공간)를 구체적으로 보고 싶을 때:
- DBA/USER/ALL_TABLES, DBA/USER/ALL_SEGMENTS, DBA/USER/ALL_EXTENTS 뷰를 사용
- 세그먼트 기준 Free Space 확인
SELECT segment_name, segment_type, bytes/1024/1024 AS mb FROM user_segments WHERE segment_name = '테이블명';
- -> 이는 테이블이 실제로 점유 중인 전체 공간입니다.
- 세그먼트 안의 FREE 영역, FRAGMENTATION 확인
SELECT fs.file_id, fs.block_id AS start_block, fs.blocks AS free_blocks, (fs.blocks * p.value)/1024 AS free_kb FROM dba_free_space fs, v$parameter p -- block size 확인시 WHERE p.name = 'db_block_size' AND fs.tablespace_name = '테이블이 속한 테이블스페이스명' ORDER BY fs.block_id;
- 단일 테이블의 unused/free space는 `DBMS_SPACE` 패키지를 활용하여 보다 상세하게 조회할 수 있습니다.
DBMS_SPACE 패키지로 구체적인 사용/비사용 공간 확인
- PL/SQL BLOCK을 이용하면 테이블의 Used, Free, Reclaimable Space
DECLARE v_unformatted_blocks NUMBER; v_unformatted_bytes NUMBER; v_fs_blocks NUMBER; v_fs_bytes NUMBER; v_full_blocks NUMBER; v_full_bytes NUMBER; BEGIN DBMS_SPACE.SPACE_USAGE( segment_owner => '스키마명', segment_name => '테이블명', segment_type => 'TABLE', unformatted_blocks => v_unformatted_blocks, unformatted_bytes => v_unformatted_bytes, fs_blocks => v_fs_blocks, fs_bytes => v_fs_bytes, full_blocks => v_full_blocks, full_bytes => v_full_bytes ); DBMS_OUTPUT.PUT_LINE('Unformatted blocks: ' || v_unformatted_blocks); DBMS_OUTPUT.PUT_LINE('Unformatted bytes: ' || v_unformatted_bytes); DBMS_OUTPUT.PUT_LINE('Free blocks: ' || v_fs_blocks); DBMS_OUTPUT.PUT_LINE('Free bytes: ' || v_fs_bytes); DBMS_OUTPUT.PUT_LINE('Full blocks: ' || v_full_blocks); DBMS_OUTPUT.PUT_LINE('Full bytes: ' || v_full_bytes); END;
blur_on {{{1}}}
결론
attach_file* ASM 사용 여부와 무관하게** 데이터베이스 레벨에서 공간 정보는 기존 데이터 딕셔너리 뷰 및 `DBMS_SPACE` 패키지로 확인
- 간편하게는 `user_segments`, `user_tables`의 데이터로 전체/사용/빈 공간을 관찰하고, 더 세밀한 정보는 `DBMS_SPACE.SPACE_USAGE` 패키지와 관련 뷰를 이용