DB는 어떻게 지속성(Durability)를 제공할까?

Alex·2025년 3월 8일
0

CS를 공부하자

목록 보기
67/74

지속성은 트랜잭션이 커밋된 이후로, 어떤 장애가 발생해도 트랜잭션의 결과가 지속되는 걸 말한다.

MySQL을 기준으로 확인해보자.

1) 리두 로그(데이터 변경이 있을 때 작성) : 이노디비는 write-ahead 로깅의 일종인 리두 로그를 사용한다. 이 방식은 실제 데이터를 변경하기 전에, 먼저 리두 로그에 변경 사항을 저장한다. DB에 장애가 발생해서 커밋된 내역이 사라지더라도, 리두 로그를 보면서 변경사항을 재적용할 수 있다.

2) (이중쓰기 버퍼)Doublewrite Buffer : 트랜잭션이 커밋됐을 때, 데이터는 먼저 특별한 버퍼에 쓰여지고서 나중에 데이터에 변경사항이 반영된다. 쓰기 과정중에 시스템이 충돌하더라도, 이중 쓰기 버퍼에서 데이터를 복구할 수 있다.

CF)언두 로그: 트랜잭션 롤백 시 언두로그를 사용한다.

작업 수행 중에 수정된 페이지들이 버퍼 관리자의 버퍼 교체 알고리즘에 따라서 디스크에 출력될 수 있다.

버퍼 교체는 버퍼의 상태에 따라 결정되며, 임의의 방식으로 일어나게 된다.

아직 완료되지 않은 트랜잭션이 수정한 페이지들도 디스크에 출력될 수 있으므로, 해당 트랜잭션이 어떤 이유든 정상적으로 종료될 수 없게 되면 트랜잭션이 변경한 페이지들은 원상 복구되어야 한다. 이러한 복구를 UNDO라고 한다.

profile
답을 찾기 위해서 노력하는 사람

0개의 댓글