'10g'에 해당되는 글 1건

  1. 2008.09.25 | Oracle10g에서의 Automatic Retention - ORA-1555에러방지

UNDO_RETENTION 파라미터는

"

자동 언두 관리(automatic undo management)"모드를 지원하는 Oracle9i Database에서 처음 소개된 파라미터이다. 이 파라미터는 언두 이미지를 일정 시간 동안 유지할 수 있게 하는 기능으로, 플래시백 질의(flashback query)를 지원한다. 언두 이미지를 찾아가는 과정에서 긴 질의의 SQL 문장에 대해서 ORA-1555 에러(snapshot too old)를 종종 볼수 있었다. Oracle9i Database까지는 ORA-1555 에러를 자동 처리할 수 없었지만, Oracle Database 10g부터는 긴 질의를 수행하는 경우 ORA-1555 에러의 빈도를 줄이기 위해서 UNDO_RETENTION 파라미터를 자동으로 튜닝하는 기능을 제공한다.
 (ORA-1555 에러에 대한 자세한 설명은 metalink 문서 40689.1  “ORA-1555 snapshot too old-Detail Explanation” 참조)


'언두 리텐션’ 에 의한 만료시간 정보는 각 언두 세그먼트 헤더 안의 Extent 맵에 저장되기 때문에, 인스턴스가 비정상 종료 되더라도 Extent맵에 적용된 undo_retention 값은 계속 보장받는다.

 먼저, undo_retention으로 인한 만료된 Extent와 만료되지 않은 Extent를 알아보자.

  • Expired Extent
    • UNDO_RETENTION 시간을 초과한 Extent 트랜잭션이 커밋된 후 
    • 언두이미지가 언두 리텐션시간을 초과한 경우
  • Unexpired Extent
    • UNDO_RETENTION 시간을 초과하지 않은 Extent 트랜잭션이 커밋된 후 
    • 언두 이미지가 언두 리텐션 시간을 초과하지 않은 경우

각각의 언두 Extent의 Expired, Unexpired 상태는 dba_undo_extents에서 확인할 수 있다.

 

Automatic Undo Retention의 기본 세팅
1.UNDO_RETENTION = 0   
2.SMU(System Managed Undo)를 사용한다.

UNDO_RETENTION을 0으로 세팅하는 경우 UNDO_RETENTION은 기본적으로 900초를 설정하게 되며, MMON 프로세스는 30초 주기로 Max-querylen을 계산하게 된다. MMON은계산된 Maxquerylen 값을 근거로 tuned_undoretention 값을 결정하게 되며,  이후 UNDO_RETENTION이 계산된 tuned_undoretention으로 설정된다.

tuned_undoretention 값은 다음과 같이 결정된다.
tuned_undoretention =  Maxquerylen + 300초

다음은 그 예이다.

select tuned_undoretention, maxquerylen, maxqueryid from v$undostat ;

tuned_undoretention             Maxquerylen         MaxqueryID
---------------------------- -----------------  --------------------
2300                                 2000                   gpxxh7pysj4fs  <============= Here.
900                                   1                        25z699hs9r3wy
900                                   1                        2syxvjbg8d6s4
900                                   44                      5scq3kj3rm7tz


 

언두 세그먼트의 Extent 할당 순서

1. 자기 자신의 Extent의 프리 블록을 찾는다.
2. 다음 Extent가 만료된 Extent인지 확인한다.
3. 언두 테이블스페이스에서 새로운 Extent를 할당한다.
4. 오프라인 트랜잭션 테이블에서 만료된 Extent를 가져온다(steal).
5. 온라인 트랜잭션 테이블에서 만료된 Extent를 가져온다(steal).
6. autoextend가 가능하다면 파일을 확장하여 Extent를 할당한다.
7. 자신의 트랜잭션 테이블에서 만료되지 않은 Extent를 재사용한다.
8. 오프라인 트랜잭션 테이블에서 만료되지 않은 Extent를 가져온다(steal).
9. 에러(ORA-30036)를 발생한다.

Oracle9i Database 이상의 데이터베이스를 운영하면서 언두테이블스페이스에 대해서 dba_free_space 의 결과로 여유공간이 얼마 남아있지 않은 것을 종종 볼 수 있다.
이는 긴 질의를 보장하기 위해서, 다시 말해 긴 질의 수행시 ORA-1555의 발생을 최대한 피하기 위해서
언두테이블 스페이스에 남아 있는 공간에 위에서 소개한 순서로 Extent를 할당하기 때문이다.
언두 테이블스페이스의 공간이 충분히 남아 있지 않더라도 필요한 Extent를 할당할 때에는 세그먼트에서 Extent를 재사용하거나 가져올 (steal) 수 있다. 
각 Extent가 만료된 것인지 아닌지에 대한 정보는 dba_undo_extents 데이터딕셔너리 뷰에서 확인할 수 있다.
이와 같이 활성상태가 아닌 만료 Extent 및 만료되지 않은 Extent가 많이 남아 있다면, 언두 테이블스페이스의 여유 공간이 얼마 남아 있지 않더라도 트랜잭션에 별 영향을 주지 않는다.
하지만, ORA-1555 에러 발생의 우려가 있기 때문에 v$undo_stat의 tuned_undoretention 값을 참조하여 적정한 언두 테이블스페이스 크기를 조정해 주는 것이 좋다.
그리고 Oracle Database 10g R2부터는 고정 언두 테이블스페이스에 대해서 ‘언두 개런티 모드’ 가 아니라면, UNDO_RETENTION 파라미터는 무시되며, 언두 테이블스페이스의 크기와 사용량에 의해서 언두 리텐션 값을 최대값으로 자동으로 설정하게 된다.


고정 언두 테이블스페이스:

    • 자동확장이 꺼져 있는 언두 테이블스페이스, 
    • Oracle9i Database 이상부터 언두 Extent를 할당하는 기능 중 하나로, 스페이스 관련 에러를 방지하기 위해서 다른 언두 세그먼트로부터 Extent를 가져오는(steal) 기능이 제공되지만, Oracle Database 10g에서는 만료되지 않은 Extent를 보장하기 위해서 언두 테이블스페이스에 대한 개런티 모드를 제공한다. (그러나, 디폴트는 노개런티 모드이다.)
    • 언두 테이블스페이스에 대한 개런티 옵션은 데이터베이스를 생성하거나
      언두 테이블스페이스를 생성하는 시점에서 지정이 가능하며, alter tablespace명령으로 지정할 수 있다.

예)

  • 개런티 모드로의 전환
    ALTER TABLESPACE undotbs RETENTION GUARANTEE;
  • 데이터 딕셔너리 뷰에서 확인
    SELECT tablespace_name, retention FROM dba_tablespaces where tablespace_name='UNDOTBS';
    tablespace_name                     Retention
    ------------------------------ -----------
    UNDOTBS                               GUARANTEE
  • 노개런티 모드로의 전환
    ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE;
  • 데이터 딕셔너리 뷰에서 확인
    SELECT tablespace_name, retention FROM dba_tablespaces where tablespace_name='UNDOTBS';
    tablespace_name                    Retention
    ------------------------------ -----------
    UNDOTBS                               NOGUARANTEE
 
블로그 이미지

시반

시반(詩伴)이란 함께 시를 짓는 벗이란 뜻을 가지고 있습니다. 함께 나눌수 있는 그런 공간이길 바라며...

카테고리

분류 전체보기 (233)
개발 이야기 (73)
WEB2.0 (57)
DB2 (24)
MySQL (6)
오라클 (26)
기타 (44)
취미 (0)
잡담 (2)