작성
·
215
0
답변 4
0
0
undo_retention 은 read consistency를 위해서 undo 데이터를 보관하고자 운영자가 설정하는 시간입니다.
가령 배치 프로그램 같이 큰 DML 등이 수행될 때 read consistency를 위해서 오랜 기간 undo 데이터를 보관이 필요할 수 있습니다.
Default는 900초(15분) 이지만, 보통은 30분 ~ 한시간 정도 설정해 놓습니다만, 배치 프로그램이 오랫동안 DML을 수행할 경우 몇시간 이상도 설정합니다.
undo_retention을 오래 잡으면 당연히 undo segment용 tablespace도 커야 합니다.
이를 계산할 때 1초당 증가하는 undo segment 크기를 기반으로 하면 됩니다.
1초당 증가하는 undo segment 는 1초당 발생하는 undo block수 x 1 block의 크기(보통은 8k) 입니다.
그리고 1 초당 증가하는 undo segment가 undo_retention 만큼 유지되려면 여기에 undo_retention 설정 초 수를 곱해 주면 됩니다.
1초당 발생하는 undo block 수: (SELECT (SUM(undoblks)/SUM(((end_time - begin_time)*86400))) AS UPS FROM v$undostat)
1 block의 크기: SELECT value AS DBS FROM v$parameter WHERE name = 'db_block_size'
undo_retention 설정값: SELECT value AS UR FROM v$parameter WHERE name = 'undo_retention'
그리고 적정한 수준의 여유 크기를 더해 주면 됩니다.
0
UNDO 테이블스페이스의 크기를 조정하려면 세 가지 데이터가 필요합니다. 두 가지 데이터
는 초기화 파일에서 얻을 수 있으며 UNDO_RETENTION과 DB_BLOCK_SIZE입니다. 공식
의 세번째 부분에는 데이터베이스에 대한 질의가 필요합니다. 초당 생성되는 실행 취소 블
록의 수는 V$UNDOSTAT에서 얻을 수 있습니다. 다음 공식은 생성되는 전체 블록의 수를 계
산하여 모니터되는 시간(초)으로 나눕니다.
SQL> SELECT (SUM(undoblks) / SUM) ((end_time - begin_time) *
86400)FROM v$undostat;
END_TIME 및 BEGIN_TIME 열의 데이터 유형은 DATE입니다. 데이터 유형 DATE 간에 뺄
셈을 수행하면 결과가 날짜로 표시됩니다. 날짜를 초로 변환하려면 하루를 초로 계산한
86400을 곱합니다.
질의의 결과로 초당 실행 취소 블록 수가 반환됩니다. 이 값은 DB_BLOCK_SIZE에 정의된
데이터베이스 블록과 같은 크기인 실행 취소 블록의 크기로 곱해야 합니다. 다음 질의는 필
요한 바
UR : undo_retention (초)
UPS : 초당 생성되는 실행 취소 데이터 블록 수
DBS : 확장 영역 및 파일 크기에 따라 달라지는 오버헤드 (db_block_size)
SQL> SELECT (UR * (UPS * DBS)) + (DBS * 24) AS "Bytes"
2 FROM (SELECT value AS UR
3 FROM v$parameter
4 WHERE name = 'undo_retention'),
5 (SELECT (SUM(undoblks)/SUM(((end_time - begin_time)*86400))) AS UPS
6 FROM v$undostat),
7 (SELECT value AS DBS
8 FROM v$parameter
9 WHERE name = 'db_block_size');
Bytes
----------
19106213
오라클 fundmental1_vol1에서 발췌했어요
0