이펙티브 오라클 (2009년)
롤백 세그먼트 관리를 오라클에 맡겨라 0 0 46,569

by 구루비스터디 UNDO_RETENTION UNDO 테이블스페이스 [2018.05.26]


  1. 과거에는 DBA가 다음과 같은 사항을 결정해야만 했다.
  2. 1. Automatic Undo Retention
    1. 1) Acuomatic Undo Retentiion의 기본 세팅
    2. 2) 자동 튜닝의 방식
    3. 3) test..


과거에는 DBA가 다음과 같은 사항을 결정해야만 했다.
  • 언두 세그먼트 헤더를 두고 벌이는 경합을 줄이기 위해 필요한 롤백 세그먼트의 수
  • 각 롤백 세그먼트에 할당해야 할 익스텐트의 수
  • 익스텐트의 크기
  • 공간 재활용을 위한 롤백 세그먼트의 되돌림 속도


1. Automatic Undo Retention

  • Oracle 9i에서는 ORA-1555 error가 가끔 발생하여 DBA가 이에 대한 조정을 해줄 필요가 있었다.
  • 그러나 Oracle 10g부터는 UNDO_RETENTION에 대한 자동 튜닝 기능을 제공하게 되었다.
  • 따라서, ORA-1555에러가 발생하지 않도록 자동으로 UNDO RETENTION을 튜닝한다.


1) Acuomatic Undo Retentiion의 기본 세팅

  • undo_retentiion=0
  • SMU(System Managed Undo)를 사용한다.


2) 자동 튜닝의 방식

  • UNDO_RETENTION을 0으로 세팅하면 UNDO_RETENTION의 최소값은 900초가 된다.
  • MMON process가 매 30초마다 query duration을 계산한다.
  • MAXQUERYLEN 이라는 값을 계산하는데 이 값에 따라서 MMON은 TUNED_UNDORETENTION이라는 수치를 결정한다.
  • 이것은 새로운 UNDO RETENTION 값이 TUNED_UNDORETENTION로 셋팅이 됨을 의미한다.
  • TUEND_UNDORETENTION = MAXQUERYLEN+ 300(sec)



SQL> show parameter undo_retention

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------
undo_retention                       integer     900


3) test..


SQL> create undo tablespace undo_big datafile size 1m
  2  autoextend on next 1m maxsize 2048M ;

테이블스페이스가 생성되었습니다.

SQL> 
SQL> create undo tablespace undo_small datafile size 1m
  2  autoextend off ;

테이블스페이스가 생성되었습니다.

SQL> 
SQL> show parameter undo_retention

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_retention                       integer     900
SQL> 
SQL> alter system set undo_tablespace=undo_big scope=memory;

시스템이 변경되었습니다.

SQL> create table t ( x char(2000), y char(2000), z char(2000));

테이블이 생성되었습니다.

SQL> insert into t values ( 'x','x','x');

1 개의 행이 만들어졌습니다.

SQL> begin
  2  from i in 1 .. 500
  3  lop
  4  update t set x=i, y=i, z=i;
  5  commit;
  6  end loop;
  7  end;
  8  /
from i in 1 .. 500

SQL> begin
  2  for i in 1 .. 500
  3  loop
  4  update t set x=i, y=i,z=i;
  5  commit;
  6  end loop;
  7  end;
  8  /

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> select bytes, maxbytes
  2   from dba_data_files
  3  where tablespace_name='UNDO_BIG';

     BYTES   MAXBYTES
---------- ----------
   5242880 2147483648

결론. 오라클은 Undo 데이터 파일을 확장하지 않았지만(확장하도록 허용되지 않았지만),
  그렇다고 트잰잭션이 수행되지 않은 것도 아니다.
  오히려 오라클은 전혀 롤백이 필요 없는 언두 정보를 사전에 말료시켰다.


UNDO 테이블 영역에 대한 주의사항
  • 지정가능한 것
  • 데이터 파일의 최대 크기를 제한하거나 데이터 파일의 자동 확장 속성을 해제함으로써 UNDO 테이블스페이스 영역의 궁극적인 크기를 지정할 수 있다.
  • UNDO 테이블스페이스 영역의 지원에 사용되는 데이터 파일의 이름을 지정할 수 있다.
  • 현행 UNDO 테이블 영역의 세그먼트 확장 알고리즘은 다른 세그먼트의 만료된 익스텐트를 재사용하기 전에 롤백 세그먼트를 키운다. 이러한 이유 때문에 프로덕션 환경에서는 UNDO 테이블 영역에 자동 확장 데이터 화일을 사용하지 않도록 하여야 한다.


UNDO SIZE 줄이는 방법
  • 1. 새로운 UNDO 테이블 영역을 생성한다.

CREATE UNDO TABLESPACE UNDO_NEW DATAFILE SIZE


  • 2. 이 UNDO 테이블 영역을 사용한다.

ALTER SYSTEM SET UNDO_TABLESPACE=UNDO_NEW SCOPE=BOTH


  • 3. 이전의 UNDO 테이블 영역을 삭제한다. "ORA-30013 : undo tablespace is currently in use" 메시지가 나타날 수도 있다. 이 메시지는 여전히 이 UNDO 테이블 영역을 필요로 하는
    ( 즉, 여전히 이 테이블 영역을 이용하고 있는 ) 트랜잭션이 존재함을 의미한다. 이 경우에는 삭제하기 전에 얼마동안 기다려야 한다.

DROP TABLESPACE OLD_UNDO TABLESPACE

"구루비 데이터베이스 스터디모임" 에서 2009년에 "이펙티브 오라클" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3477

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입