데이터베이스 기초
많은 DBMS는 데이터를 갱신할 때 갱신 내용을 로그(저널)에 기록하고, 그 로그를 데이터베이스 본체보다 먼저 비휘발성 저장 장치에 쓴다(WAL: 로그 선행 기록). 이 방식을 취하는 주된 이유는?
- A장애가 일어나도 로그를 바탕으로 커밋된 갱신을 다시 수행하고 커밋되지 않은 갱신을 취소하여 올바른 상태로 되돌릴 수 있기 때문에
- B로그를 먼저 쓰면 데이터베이스 본체의 용량이 작아지기 때문에
- CSELECT 문의 검색에서 로그를 색인으로 사용할 수 있기 때문에
정답과 해설 보기
정답: A. 장애가 일어나도 로그를 바탕으로 커밋된 갱신을 다시 수행하고 커밋되지 않은 갱신을 취소하여 올바른 상태로 되돌릴 수 있기 때문에
데이터베이스 본체의 페이지는 성능을 위해 메모리상의 버퍼에서 갱신한 뒤 잠시 후에 저장 장치에 쓰입니다. 그래서 장애가 일어난 순간에는 커밋했는데 본체에 쓰이지 않은 갱신이나, 커밋하지 않았는데 본체에 쓰인 갱신이 섞여 있을 가능성이 있습니다. 갱신 전 값과 갱신 후 값을 로그에 기록하고 로그를 본체보다 먼저 써 두면, 장애 후에 로그를 바탕으로 커밋된 갱신을 다시 수행하고(롤포워드, REDO), 커밋되지 않은 갱신을 취소하여(롤백, UNDO) 올바른 상태로 되돌릴 수 있습니다. 커밋은 그 트랜잭션의 커밋 기록이 로그에 쓰인 시점에 완료된 것으로 볼 수 있으므로, 본체의 페이지를 매번 바로 쓸 필요가 없어 성능도 유지됩니다. 이 구조가 ACID 특성의 원자성과 지속성을 뒷받침합니다.