권순용의 DB 이야기
데이터베이스의 수호자, Redo Log Buffer 6부. 0 2 3,645

by axiom Redo Log Buffer Redo Log 기록 LGWR Redo Log File [2014.02.17]


데이터베이스 아키텍처를 분석하고 학습하다 보면 항상 데이터베이스 내부 구조에 대한 호기심이 생기게 마련이다. 이와 같은 데이터베이스 내부 아키텍처는 실제 업무를 수행하는 데 큰 도움이 되지는 않을 수 있다고 생각한다.

하지만 데이터베이스 내부 아키텍처를 이해하는 순간 데이터베이스에 문제가 발생하는 경우 정확한 그리고 논리적인 분석이 가능해진다. 그렇기 때문에 데이터베이스를 확실하게 분석하기 위해서는 데이터베이스 Internal은 반드시 이해하는 것이 유리하다.

Redo Log Buffer의 목적은 복구를 위해서다. 그렇기 때문에 Redo Log Buffer는 복구를 위해 모든 아키텍처가 구성되어 있다. 이번 강좌에서는 Redo Log의 기록에 대해 확인해 보자.

Redo Log Buffer 기록

Redo Log Buffer는 다음과 같은 경우에 LGWR에 의해 Redo Log Buffer의 Active한 영역을 Redo Log File에 기록하게 된다.

  • - COMMIT 발생 시
  • - Log Buffer의 공간 부족 시
  • - Log Buffer의 1/3이 채워졌을 시
  • - Redo Record의 크기가 1MB 이상일 경우
  • - Thread Close
  • - Log Switch 발생 시
  • - 3초에 한 번씩(Time Out)

위와 같은 경우에 Redo Log Buffer의 Active 영역이 Redo Log File에 기록되게 된다

Sync Write

Sync Write는 Redo Log Buffer의 공간이 1/3이 채워졌을 경우 LGWR에 의해 Redo Log Buffer의 내용을 Redo Log File에 기록하게 된다. 해당 항목은 오라클 파라미터 중 _LOG_IO_SIZE 파라미터에 의해 결정된다. 기본 값으로는 해당 Redo Log Buffer의 1/3에 해당하는 값이 설정된다.

Redo Log Buffer를 크게 설정하게 되면 _LOG_IO_SIZE 파라미터의 값이 자동으로 커지며 그렇게 되면 Sync Write의 값이 증가하게 된다. Sync Write의 값이 큰 경우에는 Log File Sync 대기 이벤트가 발생할 수 있다. 그런 이유에서 오라클 11g의 경우에는 해당 값이 1/6의 값으로 설정된다.

LGWR 프로세스

Redo Log Buffer의 내용을 Redo Log File에 기록하기 위해서는 어떤 프로세스에 의해 작업을 수행해야 한다. 이와 같이 Redo Log Buffer의 내용을 Redo Log File에 기록하는 프로세스가 LGWR에 해당한다. 이와 같은 LGWR은 다음과 같은 절차에 의해 수행된다.

  • 1) Redo Writing Latch 획득 : LGWR의 작업을 요청하는 경우 Redo Writing Latch를 획득한 프로세스만이 LGWR을 기동시 킬 수 있다. 이는 여러 프로세스가 LGWR 프로세스에게 작업을 동시에 요청할 경우 LGWR 프로세스의 비정상적인 작동을 방지 하기 위해 Redo Writing Latch를 획득한 하나의 프로세스만이 LGWR 프로세스를 기동시킬 수 있게 된다.
  • 2) Redo Allocation Latch 획득 방지 : LGWR이 Redo Log Buffer의 내용을 기록하기 전에 Redo Allocation Latch에 의해 Redo Log Buffer의 여유 공간을 할당하는 것을 방지한다. 이는 LGWR이 Redo Log File에 기록해야 하는 대상을 선정해야 하기 때문이다.
  • 3) Write Buffer 결정 : Redo Log Buffer의 내용 중 어떤 내용을 Redo Log File에 기록할지 대상을 선정한다.
  • 4) 새로운 SCN 할당 : Redo Log Buffer의 내용을 기록하기 전에 새로운 SCN을 할당한다.
  • 5) Redo Allocation Latch 획득 방지 해제 : 이전에 Redo Log Buffer의 여유 공간을 할당하지 못하게 한 부분에 대해 해제한다.
  • 6) Writing 양을 결정 : 기록되어야 할 Redo Log Buffer의 양을 결정한다.
  • 7) RBA 계산 : 추후 해당 Redo Record를 이용해 추후 복구를 수행할 때 사용하게 된다.
  • 8) Redo Writing Latch 획득 해제 : Redo Writing Latch를 획득한 부분에 대해 해제한다.
  • 9) 대상 Redo Log Buffer 확인 : 기록하기로 선정된 버퍼의 현재 상태를 확인 한다.
  • 10) 대상 Redo Log Buffer의 헤더 갱신 : SCN 등의 정보를 갱신한다.
  • 11) 기록 확인 : LGWR에 의해 선정된 Redo Log Buffer의 기록 및 확인을 수행 한다.

  • [그림 1] Redo Log Buffer 기록
  • Redo Log Buffer 기록

  • [그림 2] LGWR 프로세스
  • LGWR 프로세스

이와 같은 절차를 수행해 LGWR은 Redo Log Buffer의 Buffer를 Redo Log File에 기록하게 된다.

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

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

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

by 신화씨앤씨 [2014.09.12 14:37:32]

감사합니다


by 우진 [2017.09.03 20:50:54]

어렵네요  하지만 뭔가 하나 하나 알게되어서 기분이 좋습니다. 

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