ROLLBACK segment 의 크기와 갯수
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 / TRANSACTIONS_PER_ROLLBACK_SEGMENT)
참고
만약 이 값이 4 이하이면, default 로 4 개의 rollback segment 를 사용한다.
CEIL은 무조건 올림이고, TRANSACTION, TRANSACTIONS_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 의 extentS 수
통계적으로 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 으로 한 이유는 평균 extents수가 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 를 생성해 두고 쓰는 방법을 권해 드림
|