TECH
QUESTION
자주하는 질문답변 입니다.
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 | |||
---|---|---|---|
등록된 코멘트가 없습니다. |