이것저것

WAL (Write-Ahead-Logging) 본문

Database

WAL (Write-Ahead-Logging)

nays111 2021. 1. 7. 04:47

[DB에 저장되는 데이터는 어디에 저장될까?]

  • 하드디스크에 저장된다. 하드디스크에 저장된 데이터를 읽어 우리가 볼 수 있도록 데이터를 가져다 준다.
  • 이 디스크를 읽는 두 가지 방식

(1) Sequential Access

(2) Random Access

=> 디스크 헤더가 움직이는 속도때문에 Sequential Access 는 Random Access 보다 무려 100배 정도 더 빠르다.

[DBMS는 데이터를 어떤 형태로 저장할까?]

DB는 디스크에 데이터를 저장할 때 블록 형태로 쪼개 디스크에 쓴다. DB는 commit을 하면 바로 DB 서버에 있는 디스크 데이터를 쓰지않고, 메모리나 Sequential한 Log에 적어 이를 보관하고 데이터가 어느정도 찼으면 BLOCK으로 만들어 하드디스크에 저장한다.

=> 즉, 바로바로 DATA BLOCK을 만들지 않는다.

※ 왜 바로바로 DATA BLOCK을 만들지 않는가?

=> 디스크 IO가 너무 자주 발생하게 되면 DB의 성능이 굉장히 떨어지기 때문이다.

그렇기 때문에, WAL이나 In Memory 등을 사용해 이 성능 저하를 방지한다.

DBMS에 트랜잭션이 발생할 경우 DBMS는 이를 모두 Sequential 한 Log 형태로 보관하게 된다.

※왜 Sequential 한 Log인가?

=> Sequential 이 위에서 언급했다시피 우선 Random 방식보다 빠르기때문이다.

Sequential Log 형태로 데이터를 나열하게 되면, 특별한 연산이나 리소스 소모가 적고 디스크 헤더 움직임도 적기 때문에 빠르게 데이터를 적을 수 있다. 그러나, Log가 적정 사이즈가 되면 이 데이터를 DATA BLOCK으로 만들어 DB에 Disk Wirte 하게 된다.

그림에서의 Log가 WAL

[WAL 이란?]

● WAL이란 Write-Ahead Logging의 약자로 로그 선행 기입

● WAL을 사용하는 시스템에서 모든 수정은 적용을 하기 전에 먼저 로그에 기록된다.

● 트랜잭션 발생시 로그에 일단 기입하여 기록을 남기고, 특정 데이터가 쌓이면 이를 flush 해 DB의 disk에 DATA BLOCK 형태로 write하게 된다.

● 일단 Log에 적히게 되면 누가 조회를 하던간에 같은 데이터를 보여주는 일관성 (Consistency)을 보장하게 되고 서버가 다운되도 이미 Log에 기입되어 있기 때문에 원자성 (Atomicity)도 보장할 수 있다.

● REDO 및 UNDO 정보를 모두 로그에 기록하며, buffer를 비우기 전에 로그파일에 기록

'Database' 카테고리의 다른 글

NOSQL 에 대하여  (0) 2021.04.17
Transaction - ACID  (0) 2021.02.17
2PL  (0) 2021.01.10
DBCP  (0) 2021.01.10
데드락  (0) 2021.01.07
Comments