인프런 커뮤니티 질문&답변

pudding님의 프로필 이미지
pudding

작성한 질문수

오라클 성능 분석과 인스턴스 튜닝 핵심 가이드

오라클 메모리 구조 및 SGA 개요

undo space 수식에 대해

작성

·

215

0

강의와 오라클 펀더멘탈을 병행하여 공부중인데
UNDO TABLE SPACE 부분에서 크기조정 관련 수식이 나오는데 해당 수식 자세한 해설 부탁드려도 될까요? 너무 어려워서요 ㅜㅜ
UndoSpace = [UR * (UPS * DBS)] + (DBS * 24)

답변 4

0

pudding님의 프로필 이미지
pudding
질문자

자세한 답변 너무 감사합니다~ 이해 잘됐어요

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

pudding님의 프로필 이미지
pudding
질문자

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

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

저 수식이 나타내는 개별 변수가 무엇인지요? 

해당 수식과 관련한 오라클 펀더멘탈(책 인가요? )의 설명 부분을 자세히 기술 부탁드립니다.

pudding님의 프로필 이미지
pudding

작성한 질문수

질문하기