Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-14
제목 ROLLBACK SEGMENT 의 갯수와 크기 결정 방법
요즘에는 UNDO TABLESPACE로 자동관리가 되므로 볼 일이 많지 않음


transaction 에 rollback segment 를 할당하는 Oracle 내부 메커니즘은
다음과 같다. 새로운 transaction 이 rollback segment 를 요청하면,
각 rollback segment 이용하고 있는 active transaction 갯수를 확인하여
가장 적은 갯수의 active transaction 을 가진 rollback segment 를 할당하여
준다.

다음은 rollback segment 의 적절한 갯수와 storage parameter 에 대한 결정
방법이다.

1) rollback segment 의 갯수

Minimum number of rollback segment
= CEIL (TRANSACTION / TRANSACTION_PER_ROLLBACK_SEGMENT)

참고)
만약 이 값이 4 이하이면, default 로 4 개의 rollback segment 를 사용한다.
CEIL 은 무조건 올림이고, TRANSACTION, TRANSACTION_PER_ROLLBACK_SEGMENT는
sqldba lmode=y(or svrmgrl) 에서 show parameter 로 확인한다.

위의 갯수는 단지 초기 추정값이므로, 다음과 같이 rollback segment 에 대한
contention 을 조회하여 이 값을 조정할 수 있다.

sqlplus system/manager

select rn.name, (rs.waits/rs.gets) rbs_header_wait_ratio
from v$rollstat rs, v$rollname rn
where rs.usn = rn.usn
order by 1;

위의 쿼리에 의해 조회된 rbs_header_wait_ratio 가 0.01 보다 크면,
rollback segment 갯수를 추가한다.


2) rollback segment 의 optimal size 선택 방법

위에 소개한 방법에 의하여, rollback segment 의 갯수를 정한 후에,
다음과 같은 test 를 통하여 storage parameter 를 결정한다.

Oracle7 에서는 이미 할당된 rollback segment 의 extent 를 반납(deallocate)
하지 않는다. 따라서, active 한 transaction 이 사용하지 않는 rollback
segment 의 extent 를 재사용하려면, optimal이라는 parameter를
rollback segment의 storage 절에 setting한다.

주의 !
Optimal size 는 Ora-1555 "snapshot too old" 가 발생하는 작업 환경에서는
setting 하지 않도록 한다. 자세한 내용은 Ora-1555 에 대한 bulletin 을 참조.


다음은 일주일 정도 peak time에 rollback segment들의 평균 크기를 구한다.

select initial_extent + next_extent * (extents -1) "RBS SIZE(byte)",
extents
from dba_segments
where segment_type ='ROLLBACK';

이 크기의 평균 값(byte)을 rollback segment들의 optimal size로 사용할 수
있다.


3) rollback segment 의 extent 횟수

통계적으로 rollback segment 의 평균 extents 는 20 정도가 좋다. extent를
일으킨 횟수가 너무 적으면, rollback segment 가 빈번하게 grow 또는 shrink
하고, 반대로 extent 를 일으킨 횟수가 너무 많으면, rollback segment가
shrink 해야 하는지를 확인하는 작업으로 Oracle resource를 낭비하게 된다.

다음은 평균 extent 횟수가 20 이고, 위의 2) 에서 구한 평균 rollback
segment 들의 optimal 크기가 2 M 인 rollback segment 를 생성하는 예이다.
(rdbms 7.1 이상 가능)

(minextents 를 20 으로 한 이유는 평균 extent 횟수가 20 이므로, rollback
segment 를 생성할 때, 이 영역을 미리 확보하겠다는 의미이다. 또한 optimal
은 minextents 로 확보한 값과 같거나 큰 값이어야 한다.
즉, minextents 이하로 shrink 할 수 없다.)

create rollback segment r01
tablespace rbs
storage (initial 100 k
next 100 k
minextents 20
maxextents 121
optimal 2 m) ;

끝으로, 대용량의 data 를 다루는 transaction을 위해 tablespace 를 분리하고
initial extent 와 next extent 가 큰 rollback segment 를 생성해 두고 쓰는
방법을 권해 드림.
534 보기 태그:
Comment
등록된 코멘트가 없습니다.