Inor

[DB] 트랜잭션 : undo, redo 본문

Computer Engineering/Database

[DB] 트랜잭션 : undo, redo

Inor 2017. 8. 13. 15:50

데이터베이스 시스템


 데이터베이스는 데이터를 비휘발성 저장 장치인 디스크에 저장 하며 전체 데이터의 일부분을 메인 메모리에 유지 합니다. 이때, 데이터는 고정된 길이의 페이지로 저장 되며 디스크에 읽거나 쓸 경우에 페이지 단위로 입출력이 이루어 집니다. 메인 메모리의 페이지를 유지하는 부분을 버퍼 관리자 혹은 페이지 버퍼 관리자라고 부르는데 이 부분은 DBMS의 모듈 중에서 매우 중요한 역할을 합니다. 트랜잭션의 버퍼 관리 정책에 따라서 REDO와 UNDO 복구를 요구하거나 요구하지 않기 때문 입니다.




UNDO


 undo 복구란 수정된 페이지를 디스크에 출력 됐을때 이 페이지가 잘못된 페이지일 경우에 이전의 상태로 되돌리는 복구를 뜻 합니다. 수정된 페이지가 디스크에 출력 될 때는 버퍼 관리자의 버퍼 교체 알고리즘에 따라서 수행이 됩니다. 보통의 경우에는 버퍼의 상태에 따라서 결정되며 일관성 관점에서 임이의 방식으로 일어나게 됩니다. 만약, 트랜잭션이 모두 수행되고 commit 되기 전까지 디스크에 아무것도 쓰지 않고 버퍼에 쌓아 놓는다면 undo 복구는 버퍼에대해서만 수행하면 되기 때문에 매우 간단해질 수 있습니다. 그러나 버퍼에 계속해서 쌓아 놓으려면 큰 크기의 메모리 버퍼가 필요 하다는 문제점을 갖고 있습니다. 아래는 수정된 내용을 디스크에 쓰는 시점을 기준으로 어떻게 버퍼를 관리할지에대한 정책들 입니다.


  • 수정된 페이지를 언제든지 디스크에 쓸 수 있는 정책
  • 수정된 페이지를 하나의 트랜잭션이 끝나는 시점까지 버퍼에 저장 했다가 디스크에 쓸 수 있는 정책

 거의 모든 DBMS가 쓰는 정책은 수정된 페이지를 언제든지 디스크에 쓸 수 있는 정책 입니다. 그렇기 때문에 undo를 위한 정보를 log에 저장하는 것과 undo 복구를 수행하는 것은 DMBS에게 필연적인 과정 이라고 할 수 있습니다.




REDO


 redo 복구란 undo의 반대 개념이라고 할 수 있습니다. 트랜잭션을 commit한 내용은 반드시 기록되야 합니다.(트랜잭션의 지속성) redo는 이미 커밋한 내용을 재반영하는 복구 입니다. redo 복구도 버퍼 관리 정책에 영향을 받습니다. 아래는 트랜잭션이 종료되는 시점에 트랜잭션이 수정한 페이지를 디스크에 쓸 것인가에대해 두가지로 정책을 나눈 내용 입니다.


  • 수정한 모든 페이지를 트랜잭션의 commit 시점에 디스크로 반영하는 정책
  • 수정한 모든 페이지를 트랜잭션의 commit 시점에 디스크로 반영하지 않는 정책

 위의 정책에서는 이미 디스크에 수정된 내용이 반영 됐기 때문에 redo 복구가 필요 없게 됩니다. 그러나 아래의 정책은 redo 복구를 통해서 디스크에 트랜잭션이 수정했던 모든 페이지에 대한 정보를 디스크에 반영 해줘야 하기 때문에 redo 복구는 필연적 입니다. 아래의 정책을 수행할때 트랜잭션이 수정했던 내용들을 디스크에 반영하지 않을 수 있기 때문에 log에 기록하고 이후에 수정된 내용들을 redo 복구를 통해서 디스크에 반영 할 수 있습니다. 대부분의 DBMS는 아래의 정책을 따르고 있습니다. redo 복구는 트랜잭션이  수정한 페이지 내용을 디스크에 반영하는것 뿐만 아니라 데이터베이스 백업으로인한 복구에도 사용 됩니다.




참고


'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
Comments