본문 바로가기
컴퓨터공학/데이터베이스(database)

[Recovery]ARIES algorithm

by 바코94 2020. 6. 5.

ARIES는 log-based recovery와 유사한 점이 많은 알고리즘이다.

 

log-based algorithm을 리뷰해보자

우선 redo phase에서는 redo 작업과 undo-list를 만드는 작업을 하는 것이다. redo는 failure전에 했던 작업들을 다시 하는 것이다. 즉, repeating history라고도 한다. 

undo phase에서는 최대 checkpoint 까지 가면서 undo 작업을 한다.

 

ARIES algorithm을 요약해보면 다음과 같다.

checkpoint 당시에 dirty block table만을 stable storage에 저장한다. 그리고 버퍼의 update data block이나 log block을 그대로 둔다. 백그라운드에서 이 저장 작업을 한다. 이처럼 빠르게 하기 위한 장치들이 존재한다.

 

1단계: start log record를 찾기 위해 analysis path를 진행한다.

2단계: redo phase

3단계: undo phase

 

log-based와 다른 점

1. checkpoint를 시작 지점으로 하지 않고 start log record를 찾는다.

2. reduce redo - redo작업을 최소화 한다.

3. check pointing 순간에 다른 트랜잭션을 중지하지 않음

 

ARIES 특징

speed up recovery

not-force/steal policy -> redo + undo

WAL 준수

log sequence number(LSN)을 사용(offset과 같이 사용) - LSN을 보고 업데이트 진행정도를 파악

repeating history: redo 작업을 할 때 예전에 했던 업데이트를 다시 하는 것처럼 하겠다.

physiological redo: logical log + physical log , b 트리에서 delete한 작업을 복구한다고 한다면 논리적으로 보상에 해당되는 insert해주면 된다. delete를 하게되면 트리의 구조가 바뀌기 때문에 physical한 redo가 어렵다.

dirty page table을 유지를 한다.

 

page LSN 사용

여러 로그 레코드 타입이 존재한다. (insert, delete , CLR 등)

dirty page table이 있다. 여기에 recLSN 정보를 저장한다.

 

pageLSN

몇 번의 log까지 반영되었는지 db disk에 저장. 10번이 db disk에 저장되어있다면 9번까지의 log를 redo할 필요가 없어짐.

 

 

log record의 구성은 다음과 같다.

log number, transaction, 이 트랜잭션과 관련있는 직전의 log record, redo inforamation, undo information

 

compensation log는 롤백을 한 트랜잭션에 대해 정상적인 복구가 이루어 지도록 한다. 즉, 복구 결과 old value로 업데이트 되도록 만들기 위한 장치이다.  

 

 

undo pass에서 빠르게 하기 위해서 2'은 1을 가리키게 된다.

 

dirty page table

buffer에 업데이트 된 페이지에 대한 정보를 담고 있는 공간이다.

page LSN of the page : data block에서 어디까지 업데이트가 되었는지 기록한다. 마지막으로 업데이트 된 lsn

recLSN: redo pass시 시작할 레코드 번호

 

 

dirty page table에서 page id 4894에 대한 pageLSN과 recLSN이 있다. 7567은 page4894에서 로그레코드 7567까지 반영했다는 뜻이다. 7564는 버퍼가 더티되는 순간에 로그 디비에 남은 로그의 번호이다. 

 

체크 포인팅하는 순간에 dirty page table만 디스크에 저장하게 된다. 따라서, 오버헤드가 적다.

 

ARIES

anlaysis pass: 복구 시작점을 찾고 언두할 트랜잭션을 찾는다.

redo pass: log record를 통해 모든 트랜잭션에 대해 redo작업을 진행한다 중간중간 redo 작업을 패스할 수도 있다.

undo pass: incomplete transaction에 대해 old value로 쓰는 과정이다.

 

end of log에서 failure가 발생했고 ARIES 로 3단계 pass가 진행된다. 2phase와는 다르게 redo pass가 checkpoint 전에서 시작할 수 있고 undo는 undo-list가 없어질 때까지 수행한다.

 

analysis pass

dirty page table 중에서 가장 작은 recLSN을 redoLSN으로 설정한다. checkpoint 시점에서 실행중인 트랜잭션들은 undo-list 초기값으로 둔다. 

 

redo pass

redoLSN부터 포워드 스캐닝을 하면서 업데이트 작업을 한다. 특정 조건을 만족시키면 redo를 스킵한다. 

 

undo pass

failure발생 시점에서 백워드 스캐닝을 하면서 undo를 한다. old value 값으로 바꿔주는 작업을 하는 것이다.

 

checkpoint 로그에는 실행중인 트랜잭션 로그와 더티페이지 테이블의 로그가 기록되어 있다.

 

analysis pass

minimum recLSN을 시작점으로 한다. dirty page table을 업데이트 하게 된다. 7565가 start 지점이 된다.

 

redo pass

 

undo pass

undo-list={T145}이기 때문에 T145와 관련된 레코드 정보인 7567부터 시작하게 된다. failure 지점부터 시작하지 않고 7567부터 시작하여 <t145 begin>이 있는 7563까지 되고 끝난다. 

 

7565 레코드는 compensation log record이고 60이 old value이다. 점선으로 나타낸 것이 관련있는 로그 중 직전 로그이다.

 

remote backup

백업 사이트에 db 와 로그디비를 백업해두어야 한다.