복구 및 로깅
복구 및 로깅 메커니즘은 로그에 변경 사항을 기록하여 트랜잭션의 원자성과 영속성을 보장합니다. 이를 통해 시스템 충돌 후에도 커밋된 작업은 다시 실행하고, 커밋되지 않은 작업은 취소할 수 있습니다.
Definition
데이터베이스 복구는 장애 발생 후 데이터베이스를 일관된 상태로 복원하는 과정으로, 커밋된 트랜잭션의 효과는 영속적으로 유지하고, 중단되거나 진행 중인 트랜잭션은 흔적을 남기지 않도록 보장합니다. 로깅은 이를 가능하게 하기 위해 트랜잭션 작업을 영속적인 로그에 기록하는 기술입니다.
Scope
이 주제는 데이터베이스가 장애로부터 어떻게 생존하는지 다룹니다: 선행 기록 로깅(WAL) 프로토콜, 실행 취소 및 다시 실행 정보, 복구 작업을 제한하는 체크포인트, 그리고 분석, 다시 실행, 실행 취소 단계를 포함하는 표준 복구 알고리즘(특히 ARIES). 또한 어떤 로깅이 필요한지를 결정하는 버퍼 관리 정책(steal/no-steal, force/no-force)을 다룹니다. 정상 작동 중 실행되는 동시성 제어 프로토콜과 분산 커밋은 인접한 주제이므로 제외합니다.
Core questions
- 로그 레코드가 설명하는 데이터보다 먼저 영구 저장소에 도달해야 하는 이유는 무엇입니까(선행 기록 로깅)?
- 실행 취소 및 다시 실행은 충돌 후 어떻게 일관된 상태를 복원합니까?
- 버퍼 관리 정책(steal/force)은 로깅 요구 사항을 어떻게 결정합니까?
- 체크포인트는 복구 시간을 제한하는 데 어떤 역할을 합니까?
- ARIES 알고리즘은 복구를 분석, 다시 실행, 실행 취소로 어떻게 구조화합니까?
Key concepts
- 선행 기록 로깅(WAL)
- 실행 취소 및 다시 실행 로깅
- 로그 시퀀스 번호
- 체크포인트
- steal/no-steal 및 force/no-force 정책
- 보상 로그 레코드
- 분석, 다시 실행, 실행 취소 단계
- ARIES
Key theories
- 선행 기록 로깅
- WAL 프로토콜은 변경 사항을 설명하는 로그 레코드가 해당 데이터 페이지보다 먼저 안정적인 저장소에 강제로 기록되어야 한다고 요구합니다. 이는 충돌 후 시스템이 커밋되지 않은 변경 사항을 실행 취소하고 커밋된 변경 사항을 다시 실행하기에 충분한 정보를 갖도록 보장합니다.
- 실행 취소/다시 실행 복구 및 버퍼 정책
- 시스템이 실행 취소, 다시 실행 또는 둘 다를 필요로 하는지는 버퍼 정책에 따라 달라집니다. steal 정책(커밋되지 않은 페이지를 디스크에 쓰는 것)은 실행 취소를 필요로 하고, no-force 정책(커밋 시 커밋된 페이지를 강제로 기록하지 않는 것)은 다시 실행을 필요로 합니다. 일반적인 steal/no-force 조합은 둘 다를 필요로 합니다.
- ARIES
- ARIES는 선행 기록 로깅, 로그 시퀀스 번호, 그리고 보상 로그 레코드를 사용한 3단계(분석, 다시 실행, 실행 취소) 알고리즘을 통해 세분화된 잠금 및 부분 롤백을 지원하는 널리 채택된 복구 방법입니다.
Clinical relevance
복구 및 로깅은 영속성을 실현하는 핵심 요소입니다. 이는 시스템이 결제나 주문과 같은 트랜잭션을 확인한 후, 해당 사실이 전원 손실 및 충돌에도 불구하고 유지되며, 트랜잭션 도중의 충돌이 데이터베이스를 부분적으로 업데이트되거나 일관되지 않은 상태로 남겨두지 않도록 보장합니다.
History
Härder와 Reuter의 1983년 연구는 트랜잭션 지향 복구의 원칙과 버퍼 정책 분류를 제시했습니다. IBM의 C. Mohan과 동료들이 개발하여 1992년에 발표된 ARIES는 선행 기록 로깅을 로그 시퀀스 번호 및 보상 레코드와 결합하여 세분화된 잠금을 지원함으로써 사실상의 표준 복구 알고리즘이 되었습니다.
Key figures
- C. Mohan
- Jim Gray
- Theo Härder
- Andreas Reuter
Related topics
Seminal works
- mohan1992
- haerder1983
- gray1992
Frequently asked questions
- 선행 기록 로깅이 왜 필요합니까?
- 데이터베이스가 트랜잭션이 커밋되기 전에 수정된 페이지를 디스크에 기록하거나, 충돌 시 커밋된 페이지를 메모리에 유지할 수 있기 때문입니다. 데이터 페이지보다 먼저 로그 레코드를 강제로 기록하면 버퍼 관리자가 무엇을 했든 관계없이 복구가 커밋되지 않은 변경 사항을 실행 취소하고 커밋된 변경 사항을 다시 실행하여 일관된 상태에 도달하기에 충분한 정보를 갖도록 보장합니다.
- 체크포인트는 무엇을 달성합니까?
- 체크포인트는 주기적으로 활성 트랜잭션을 기록하고 장부 기록을 로그에 플러시하여 복구에 최근의 알려진 양호한 시작점을 제공합니다. 체크포인트가 없으면 복구는 로그 전체를 처음부터 스캔해야 할 수도 있습니다. 체크포인트는 복구가 얼마나 멀리까지 처리해야 하는지를 제한하여 재시작 시간을 관리 가능하게 유지합니다.