Managing Tablespace : Part 2
COALESCING FREE SPACE IN DMT
Dictionary- Managed tablespaces(DMT) 는 단편화가 일어나 새로운 익스텐트(Extent)를 할당하는데 어려움이 생길 수 있습니다. 이번 포스팅에서는 이러한 단편화된 공간을 정리하는 방법에 대해서 알아보겠습니다.
How Oracle Coalesces Free Space
DMT에서의 빈 익스텐트는 인접해 있는 비어있는 블록들의 모음도 포함합니다. 테이블스페이스 세그먼트에 새로운 익스텐트를 할당할때, 요구된 사이즈는 가장 근접한 비어있는 익스텐트에 할당하게 됩니다. 세그먼트를 드롭하는 몇몇의 경우 세그먼트가 포함하고 있던 익스텐트는 해제되고 비어있는 공간임을 표시합니다. 하지만 해제되어 비어있는 익스텐트는 큰 비어있는 익스텐트에 바로 융합되지 않습니다. 결과적으로 좀더 큰 익스텐트를 할당하는데 있어 좀더 어려운 상황을 맞이하게 됩니다.
단편화는 다음 몇몇의 경우에 발생하게 됩니다.
- 세그먼트에 새로운 익스텐트를 할당할시 오라클은 우선 새로운 익스텐트가 들어갈 수
있을 정도의 충분히 큰 빈 익스텐트를 찾습니다. 어떤 빈 익스텐트도 요구하는 크기보다
크지 않을때 테이블 스페이스 내에서 인접해 있는 비어있는 익스텐트들을 합치고 다시
빈 익스텐트를 검색합니다. 새로운 익스텐트 할당을 할 수 없을 시 오라클은 항상 이 작업
을 수행합니다.
- SMON 백그라운드 프로세서는 PCTINCREASE 값이 0이 아닐경우 정기적으로 이웃해 있
는 비어있는 익스텐트의 병합 작업을 수행합니다. PCTINCREASE=0 으로 설정해 놓으면
빈 익스텐트의 병합은 일어나지 않습니다. SMON 이 병합에 의해 오버헤드가 발생하는 것
이 걱정이 되면 PCTINCREASE=0 으로 설정하고, 정기적으로 익스텐트를 수동으로 병합
하면 됩니다.
- 세그먼트가 드롭(DROP) 되거나 잘릴때 (TRUNCATE) PCTINCREASE 값이 0이 아닐때
익스텐트의 병합이 일어나고, 이 값이 0이 아니어도 역시 병합이 수행됩니다.
- ALTER TABLESPACE ... COALESCE 명령으로 수동으로 병합을 수행할 수 있습니다.
Manually Coalescing Free Space
비어있는 공간의 단편화가 심하다는 것을 확인했다면, ALTER TABLESPACE ... COALESCE 명령을 통해 익스텐트를 수동으로 병합할 수 있습니다. ALTER TABLESPACE 의 시스템 권한을 요구합니다.
PCTINCREASE=0일때나 SMON의 부하를 조금이라도 줄이기 위해 이 명령어를 사용할 수 있고 할당된 익스텐트를 병합할때 사용합니다. 만약 테이블스페이스에 할당된 익스텐트의 크기가 모두 같다면 병합 작업은 필요하지 않습니다. 이는 아마도 PCTINCREASE 값이 0으로 설정되어 있을 경우이거나 테이블 스페이스의 스토리지 파라메터인 INITIAL, MINIMUM EXTENT, NEXT 값이 모두 같을 경우 일 것 입니다.
다음 구문은 tabsp_4 테이블스페이스의 빈 공간을 병합하는 명령입니다.
ALTER TABLESPACE tabsp_4 COALESCE
다른 ALTER TABLESPACE .. 명령과 마찬가지로 COALESCE 옵션은 베타적입니다. 즉, 다른 부가적인 옵션은 사용하지 않고 혼자서 쓰입니다.
이 구문은 데이터 익스텐트에 의해 단편화된 빈 공간을 합치지는 않습니다. 데이터 익스텐트 사이사이에 빈 익스텐트가 많이 발견된다면 테이블 스페이스를 재정렬 해야 합니다.(예를들어 Import/Export 를 이용)
Monitoring Free Space
테이블 스페이스의 빈 공간을 조회하기 위해 다음 뷰를 사용합니다.
- DBA_FREE_SPACE
- DBA_FREE_SPACE_COALESCED
다음 구문은 tabsp_4 테이블 스페이스에 대한 공간 정보 입니다.
SELECT BLOCK_ID, BYTES, BLOCKS
FROM DBA_FREE_SPACE
WHERE TABLESPACE_NAME='TABSP_4'
ORDER BY 1;
|
BLOCK_ID -------------- |
BYTES --------------- |
BLOCKS ------------- |
|
2 |
16384 |
2 |
|
4 |
16384 |
2 |
|
6 |
81920 |
10 |
|
16 |
16384 |
2 |
|
27 |
16384 |
2 |
|
29 |
16384 |
2 |
|
31 |
16384 |
2 |
|
33 |
16384 |
2 |
|
35 |
16384 |
2 |
|
37 |
16384 |
2 |
|
39 |
8192 |
1 |
|
40 |
8192 |
1 |
|
41 |
19660 |
24 |
13 Rows selected
이 뷰는 tabsp_4 테이블스페이스에 인접한 병합되어 있지 않는 빈 공간을 보여주고 있습니다. ALTER TABLESPACE COALESCE 구문을 이용하여 이들을 병합하면 다음과 같은 결과를 얻습니다.
|
BLOCK_ID -------------- |
BYTES --------------- |
BLOCKS ------------- |
|
2 |
131072 |
16 |
|
27 |
311296 |
38 |
DBA_FREE_SPACE_COALESCED 뷰는 병합활동의 통계를 보여줍니다. 이 뷰는 공간을 병합할지의 여부를 결정하는데 매우 쓸모있습니다.
SPECIFY NONSTANDARD BLOCK SIZE TABLESPACE
테이블스페이스를 작성시 DB_BLOCK_SIZE 초기화 파라메터에 정의되어 있는 표준 블록 사이즈와 다른 크기의 블록 사이즈를 가진 테이블 스페이스를 만들 수 있습니다. 이 기능은 표준 블록 사이즈가 다른 데이터베이스 간에 테이블을 주고 받을 수 있게 합니다.
CREATE TABLESPACE 구문의 BLOCKSIZE 단서는 표준 블록 사이즈와 다른 블록 사이즈를 갖는 테이블 스페이스를 만들 수 있게 해 줍니다. 단, SGA에 비표준 블록사이즈의 퍼퍼 캐시를 설정해 주어야 합니다.
다음 구문은 lmtsb 테이블 스페이스를 생성하지만, 표준 블록 사이즈와 다른 블록 사이즈를 가지고 만듭니다.
CREATE TABLESPACE lmtsb DATAFILE '/u02/oracle/data/lmtsb01.dbf' SIZE 50M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K
BLOCKSIZE 8K;
* BLOCKSIZE nK 단서를 수행하기 위해서는 DB_CACHE_SIZE와 최소 한개의
DB_nK_CACHE_SIZE 초기화 파라메터를 설정해야 합니다. BLOCKSIZE nK
에서의 n과 DB_nK_CACHE_SIZE 의 n 값은 반드시 같아야 합니다.
CONTROLLING THE WRITING OF REDO RECORDS
데이터베이스를 운영중에 리두 레코드(Redo Record) 를 생성 할지 안할지를 정할 수 있습니다. 리두를 생성하지 않는것은 성능을 향상시킬 수 있고, 쉽게 복구가 가능한 행위를 할때 사용할 수 있습니다. 이런 경우는 아마도 CREATE TABLE .. AS SELECT 같은 인스턴스가 실패해도 명령을 반복적으로 수행할 수 있는 경우가 될 것 입니다. 리두를 사용하지 않으면 미디어 복구(Media Recovery)를 수행할 수 없습니다.
CREATE TABLESPACE 구문의 NOLOGGING 옵션은 테이블스페이스에서 오브젝트가 활동할때 리두를 작성하지 않길 원할때 사용합니다. 이 옵션을 달지 않으면 LOGGING으로 설정되고 테이블스페이스내의 오브젝트가 변경되거나 만들어질때 리두를 기록합니다. 리두는 LOGGING 옵션을 붙인다 하더라도 임시 세그먼트나 임시 테이블스페이스에 관한 기록은 절대 하지 않습니다.
테이블스페이스 레벨에서 설정한 이 옵션은 테이블스페이스 내에서 생성되는 모든 오브젝트에게 적용됩니다. 이러한 옵션은 스키마 레벨에서 오브젝트를 작성할 때 오버라이드 하여 사용할 수 있습니다. (예를들어 CREATE TABLE 구문)
스텐바이 데이터베이스의 경우 NOLOGGING 을 설정하는것은 스텐바이 데이터베이스의 정확성과 이용성에 문제를 야기할 수 있습니다. 이 문제를 극복하기 위하여 테이블을 작성시FORCE LOGGING 을 사용할 수 있습니다. 이는 테이블스페이스 내에서 오브젝트의 변화를 강제로 기록할 수 있게 합니다. 이 옵션은 오브젝트 레벨에서 만들어진 모든 객체에 사용 가능합니다.
FORCE LOGGING 으로 만들어진 테이블 스페이스를 다른 데이터 베이스로 옮기면 새로운 테이블 스페이스는 FORCE LOGGING 옵션은 다루지 않습니다.
FIN.
REF) Oracle Documents.Server.920/a96521 Managing Tablespaces
댓글 없음:
댓글 쓰기