by axiom Redo Log Buffer Page Fix Rule Write-Ahead Logging Change Vector Log Ahead [2013.12.19]
필자는 데이터베이스를 확실히 분석하기 위해 데이터베이스 Internal을 반드시 이해해야 한다고 지난 시간에 강조했다.
이번 강의에는 데이터베이스의 복구 및 데이터 정합성을 책임지는 Redo Log Buffer의 Page Fix Rule과 Write-Ahead Logging에 대해 확인해 보자.
데이터베이스를 Install하기 위해 사전 작업으로 세마포어를 설정하게 된다. 이와 같은 세마포어는 운영체제 수준의 락을 구현하게 된다.
Redo Log Buffer의 두 번째 사상은 이와 같은 세마포어를 이용한 Page Fix Rule이다.
Page Fix Rule은 블록에 변경을 시도하는 순간에 해당 블록의 보호를 세마포어가 시작하는 과정을 의미한다.
세마포어에 의해 보호가 시작된 블록은 해당 블록에 대한 변경이 완료되고 Commit이 수행되는 시점까지 세마포어에 의해 변경을 방지하게 된다. 이와 같은 세마포어를 수행하는 단계를 확인해 보자.
이와 같이 Page Fix Rule은 변경되는 블록에 대한 데이터 정합성을 수행하며 이를 이용해 Redo를 생성하는 사상이다.
두 번째 단계의 블록에 대해 Read/Modify 전에 해당 블록을위한 Redo/Undo Change Vector 생성에 대해 더 상세히 확인해 보자.
예를 들어 하나의 블록이 변경되는 경우 Undo Segment의 공간을 할당 받고 경우에 따라서는 Extent를 할당 받아 실제 작업을 수행하게 된다. 이와 같은 각각의 작업을 Change Vector라고 한다.
이와 같은 Change Vector의 모임을 Redo Record라고 부르며 Redo Record는 Change Vector보다는 큰 작은 트랜잭션을 의미한다.
[그림 2]와 같이 실제의 트랜잭션은 여러 개의 Redo Record로 구성되고 하나의 Redo Record는 실제 여러 개의 Change Vector로 구성된다.
Redo Log Buffer의 세 번째 사상은 Write-Ahead Logging이다. 이를 Log Ahead라고도 부른다.
앞서 Redo Log Buffer의 가장 큰 목적은 복구에 있다고 언급했다. 블록이 변경된 후 Redo Log를 생성해 Redo Log Buffer에 저장한다면 어떻게 되겠는가?
블록이 변경된 후 Redo Log를 생성하지 못하고 데이터베이스가 비정상 종료를 한다면 해당 트랜잭션은 Redo Log가 존재하지 않기 때문에 복구를 수행할 수 없게 된다.
이와 같은 이유에서 오라클 데이터베이스는 블록을 변경하기 전에 반드시 Redo Log를 생성해야 하는 Write-Ahead Logging 기법을 사용하게 된다.
이와 같이 Write-Ahead Logging을 사용하게 되므로 완벽한 복구를 수행할 수 있게 된다. Write-Ahead Logging은 다음과 같이 두 가지 경우로 분리된다.
변경하기 위한 버퍼를 데이터베이스 버퍼 캐시에 캐싱한 후 실제 변경을 수행하기 전에 Redo를 Log Buffer에 먼저 기록하는 방식이다.
DBWR이 변경된 블록 버퍼를 데이터 파일에 기록하기 전에 LGWR이 Redo Record를 Redo Log File에 기록하는 방식이다.
LRU 알고리즘에 따라 DBWR에 의해 변경된 블록 버퍼를 데이터 파일에 기록하기 전에 해당 변경에 대한 Redo Record가 LGWR에 의해 Redo Log File에 기록되었는지를 확인한다.
확인 결과 LGWR에 의해 기록이 완료되었다면 DBWR은 해당 변경이 발생한 블록에 대해 데이터 파일에 기록할 수 있지만 LGWR에 의해 해당 Redo가 Redo Log File에 기록되지 않았다면 DBWR은 LGWR에 의해 해당 Redo가 Redo Log File에 기록될 때 까지 대기(Post/Wait)하게 된다.
이와 같은 Write-Ahead Logging에 의해 해당 데이터베이스는 완벽한 복구를 수행하게 된다.
- 강좌 URL : http://www.gurubee.net/lecture/2667
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.