inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Online Redo Log File 이해

redo log buffer -> online redo log file 문의

해결된 질문

368

leeyulkyu

작성한 질문수 2

0

안녕하세요.

[강의: Online Redo Log File 이해] 관련하여 문의 드립니다.

 

설명에 commit외에 redo log buffer가 1/3 이상 차는 등 commit이 없더라도 online redo log file이나 archive log file로 입력이 되는 경우가 있다고 하는데요.

이 경우, 이후에 유저가 rollback을 하거나 commit을 하면 해당 내용이 redo log buffer에 없을테니, online redo log file이나 archive log file(archive까지 가는 일은 없겠지만...)에서 commit이나 rollback이 안된 내용이 있는지 내부적으로 확인을 하는 로직이 있는건가요?

 

만약에 로직이 있다면, commit이나 rollback 전에 다시 redo buffer에 올려두고 commit 작업을 하는지, 아니면 각 파일에서 바로 마치 direct i/o처럼 disk에 commit내용을 입력을 하는지 궁금합니다.

redolog DBMS/RDBMS oracle

답변 1

0

권 철민

안녕하십니까,

"commit이나 rollback이 안된 내용이 있는지 내부적으로 확인을 하는 로직이 있는건가요?" 내용을 제가 정확히 이해했는지는 모르지만,,,

redo log buffer와 online redo log file은 사용자 transaction이 접근할 수 있는 영역이 아닙니다. 이는 오라클 백그라운드 프로세스가 관장하는 영역입니다.

강의에서는 제가 undo segment에 대해서 설명드리진 않았지만, 사용자의 DML transaction 수행 시에는 DML 적용된 신규 데이터가 Buffer Cache에 적용되고, DML 적용 전 과거 데이터는 Undo Segment로 보내지게 됩니다.

예를 들어 table A에 PK 1 ~ 1000까지 천개의 레코드를 특정 컬럼값을 '가나다'에서 'ABC'로 변경한다고 하겠습니다(즉 천개의 레코드가 UPDATE됩니다).

Update시 commit을 하지 않았다고 하더라도 오라클의 background process는 redo log buffer에 데이터를 보냅니다. 또한 redo log buffer에 특정 영역만큼 데이터가 차게 되면 commit이 되지 않아도 redo log file로 일단 내립니다.

그리고 사용자 transaction은 'ABC'로 변경된 천개의 데이터를 buffer cache로 로딩함과 동시에 변경전 데이터인 '가나다'도 Undo Segment로 보내게 됩니다.

해당 사용자 transaction이 아닌 다른 사용자 transaction이 해당 테이블 A의 PK 1의 데이터를 참조하려고 하면 해당 데이터는 아직 Commit 되지 않았으므로 Undo segment에서 데이터를 가져오게 되고 다른 사용자 transaction은 예전 데이터인 '가나다'로 데이터를 참조하게 됩니다.

하지만 해당 사용자 transaction은 변경된 데이터를 buffer cache에서 참조하므로 'ABC'로 된 데이터를 참조합니다.

데이터를 참조하면(가령 pk 1인 데이터)사용자 transaction은 commit 되지 않은 데이터를 Query transaction에서 참조하게 된다면(가령 pk 1 데이터)를 undo segment에서 해당 데이터를 참조합니다.

이제 해당 사용자 transaction을 commit하게 되면 해당 테이블 A를 조회할 때 다른 사용자 transaction은 더 이상 undo segment를 참조하지 않고 Buffer cache를 참조하게 됩니다.

만약 rollback을 하게 되면, undo segment에 있던 과거 데이터를 buffer cache로 옮겨 버리게 되고 모든 사용자 transaction이 해당 buffer cache를 참조하게 됩니다.

원하시는 답변이 아니면 다시 글 부탁드립니다.

감사합니다.

Toad for Oracle Trial 버전을 지원하지 않는것으로 보입니다.

0

65

1

table full scan과 index_ffs 성능비교

0

127

2

HDD가 아닌 SSD인 경우는 dBMS I/O가 어떻게 동작하나요?

0

126

2

HOST CPU 자료를 받으려면?

0

145

3

Buffer Cache를 통한 데이터 Access 에서 DBA 정보를 어떻게 알아내는지 궁금합니다.

0

158

2

random i/o와 full scan 문제 질문

0

170

3

hugepage_settings.sh 파일 실행시 커널 버전

0

215

2

강의중 윈도우 경고음?이 너무 크게 들릴때가 있습니다.

0

152

3

19ee 설치 관련

0

169

2

클라우드 굳이 안해도 되나요??

0

254

2

full scan 시 OS I/O 질문있습니다.

0

242

1

19c ee rpm 파일 설치 문의

0

229

1

direct path read/write temp 관련 질문

0

246

1

swingbench 에러좀 확인부탁드려요

0

343

2

회원가입 시 Customer type 구분

0

243

2

수료증 발급문의

0

234

1

swingbench 2.6 다운이 안받아져요

0

276

1

오라클 long data type 지원

0

439

1

sqldeveloper를 앞에서 썼다고 하셧는데...

0

216

1

soe_10g_01.dbf생성중 오류

0

224

1

TOAD 연결 질문드립니다.

0

349

1

oracl21c로 설치해도 되나요?

0

277

1

Hard Parsing의 자원 사용

1

514

2

Sequential Acess는 HDD상에서도 Block을 Sequential하게 읽나요?

1

369

2