database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 9327 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 9327
사용되지 않은 공간을 DEALLOCATE
작성자
정재익(advance)
작성일
2002-01-07 02:12
조회수
4,660

사용되지 않은 공간을 DEALLOCATE

 

TABLE, INDEX, CLUSTER등의 DATABASE OBJECT들은 입력되는 자료의 양이 증가함에 따라서 새로운 EXTENT들이 자동적으로 할당된다.

 

이때 필요이상 과도한 크기의 EXTENT가 할당되면 실제로 자료가 들어있지 않거나 들어갈 예정이 없는 죽은 공간이 생길 수 있게 된다. 이러한 죽은 공간은 DISK전체의 사용효율을 저하시키는 원인이 되므로 적절히 제거되어야 하는데 여기서는 그중에서 DEALLOCATE라는 방법에 대해서 알아 본다.    

1. DEALLOCATE의 대상   

    

TABLE, INDEX, CLUSTER들이 생성된 이후에 한번도 사용되어지지 않은 공간. ORACLE에서는 이렇게 한번도 사용되지 않은 공간을 HIGH WATER MARK라는 개념으로 설명하는데 이는 다음과 같다. 

   

TABLE_A 의 EXTENT구조

   EXTENT1

|------------------

   EXTENT2

|----------------A-------------

EXTENT3

|-----------B---------------|

 

A.현재 DATA가 차있는 위치  B.HIGH WATER MARK

 

TABLE이 생성된 이후 DATA가 INSERT되어 B지점까지 공간을 점유하고 있었다고 가정을 하자. 이후 DATA가 DELETE되어 현재 DATA들이 점유하고 있는 위치는 A라고 하면 B지점이 HIGH WATER MARK가 된다.   

    

DEALLOCATE작업을 하면 HIGH WATER MARK위의 공간만이 FREE되며, HIGH WATER MARK아래의 공간들 (B-A)은 이후 DATA가 다시 INSERT될 것을 예상하여 그대로 빈공간으로 남겨두게 된다.   

     

    

2. DEALLOCATE의 대상이 되는 공간이 어느정도 존재하는지 파악하는 방법   

 

ANALYZE TABLE table_name COMPUTE STATISTICS ;   

 

예 1)  

 

SELECT EMPTY_BLOCKS, BLOCKS   

FROM DBA_TABLES   

WHERE TABLE_NAME = 'table_name' ;    EMPTY_BLOCKS 

------------

BLOCKS 

--------

 

6530

2400 

 

 

 

EMPTY_BLOCKS  : OBJECT에 할당된 총 SPACE중 HIGH WATER MARK 위의 공간   

BLOCKS      : OBJECT에 할당된 총 SPACE중 HIGH WATER MARK 아래의 공간   

    

여기서 EMPTY_BLOCKS + BLOCKS(해당 OBJECT의 총 SPACE)에 비해서 EMPTY_BLOCKS 이 과도하게 크고 앞으로 더이상의 DATA INSERT도 일어나지 않을 계획이라면 DEALLOCATE를 하는 것이 좋다.

    

3. SYNTAX   

    

ALTER TABLE table_name DEALLOCATE UNUSED [KEEP integerK] ; ALTER INDEX index_name DEALLOCATE UNUSED [KEEP integerK] ; ALTER CLUSTER cluster_name DEALLOCATE UNUSED [KEEP integerK] ;   

 

KEEP절을 사용하면 KEEP절에 정의된 크기만큼은 남겨두고 DEALLOCATE를 한다.   

    

예 2)   

위의 예 1)에서   

 

ALTER TABLE table_name DEALLOCATE UNUSED ;

 

를 수행하면 다음과 같이 SPACE 

 

ANALYZE TABLE table_name COMPUTE STATISTICS ;   

    

SELECT EMPTY_BLOCKS, BLOCKS   

FROM DBA_TABLES   

WHERE TABLE_NAME = 'table_name' ;   

 

EMPTY_BLOCKS 

------------

BLOCKS 

-------

 

0

2400

 

위의 조회 결과를 보면 HIGH WATER MARK위 부분(EMPTY_BLOCKS)은 FREE되어 0으로 표시되고 HIGH WATER MARK아래부분(BLOCKS)은 그대로(2400) 남아있다. 

[Top]
No.
제목
작성자
작성일
조회
9330오라클 설치후 각각의 디렉토리에 대한 설명
정재익
2002-01-07
5514
9329DYNAMIC SQL 이란?
정재익
2002-01-07
7850
9328Rollback Segment 의 크기와 갯수
정재익
2002-01-07
5254
9327사용되지 않은 공간을 DEALLOCATE
정재익
2002-01-07
4660
9326CONNECT internal 시 패스워드를 물어 오는 문제 해결
정재익
2002-01-07
4943
9324ORA-1547 에러 발생의 원인
정재익
2002-01-07
4458
9303rowid 에 대한 이해
정재익
2002-01-06
6209
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다