Inor
[DB] 트랜잭션 : undo, redo 본문
데이터베이스 시스템
데이터베이스는 데이터를 비휘발성 저장 장치인 디스크에 저장 하며 전체 데이터의 일부분을 메인 메모리에 유지 합니다. 이때, 데이터는 고정된 길이의 페이지로 저장 되며 디스크에 읽거나 쓸 경우에 페이지 단위로 입출력이 이루어 집니다. 메인 메모리의 페이지를 유지하는 부분을 버퍼 관리자 혹은 페이지 버퍼 관리자라고 부르는데 이 부분은 DBMS의 모듈 중에서 매우 중요한 역할을 합니다. 트랜잭션의 버퍼 관리 정책에 따라서 REDO와 UNDO 복구를 요구하거나 요구하지 않기 때문 입니다.
UNDO
undo 복구란 수정된 페이지를 디스크에 출력 됐을때 이 페이지가 잘못된 페이지일 경우에 이전의 상태로 되돌리는 복구를 뜻 합니다. 수정된 페이지가 디스크에 출력 될 때는 버퍼 관리자의 버퍼 교체 알고리즘에 따라서 수행이 됩니다. 보통의 경우에는 버퍼의 상태에 따라서 결정되며 일관성 관점에서 임이의 방식으로 일어나게 됩니다. 만약, 트랜잭션이 모두 수행되고 commit 되기 전까지 디스크에 아무것도 쓰지 않고 버퍼에 쌓아 놓는다면 undo 복구는 버퍼에대해서만 수행하면 되기 때문에 매우 간단해질 수 있습니다. 그러나 버퍼에 계속해서 쌓아 놓으려면 큰 크기의 메모리 버퍼가 필요 하다는 문제점을 갖고 있습니다. 아래는 수정된 내용을 디스크에 쓰는 시점을 기준으로 어떻게 버퍼를 관리할지에대한 정책들 입니다.
- 수정된 페이지를 언제든지 디스크에 쓸 수 있는 정책
- 수정된 페이지를 하나의 트랜잭션이 끝나는 시점까지 버퍼에 저장 했다가 디스크에 쓸 수 있는 정책
REDO
redo 복구란 undo의 반대 개념이라고 할 수 있습니다. 트랜잭션을 commit한 내용은 반드시 기록되야 합니다.(트랜잭션의 지속성) redo는 이미 커밋한 내용을 재반영하는 복구 입니다. redo 복구도 버퍼 관리 정책에 영향을 받습니다. 아래는 트랜잭션이 종료되는 시점에 트랜잭션이 수정한 페이지를 디스크에 쓸 것인가에대해 두가지로 정책을 나눈 내용 입니다.
- 수정한 모든 페이지를 트랜잭션의 commit 시점에 디스크로 반영하는 정책
- 수정한 모든 페이지를 트랜잭션의 commit 시점에 디스크로 반영하지 않는 정책
참고
'Computer Engineering > Database' 카테고리의 다른 글
[DB] 정규화 (0) | 2017.08.14 |
---|---|
[DB] 트랜잭션 : Recovery(회복) (0) | 2017.08.14 |
[DB] 트랜잭션 : Log (0) | 2017.08.14 |
[DB] 트랜잭션(Transaction) (0) | 2017.08.11 |