- 우선 글을 설명하기 앞서 아래 내용은 Write Ahead Logging - WAL 헤당 글을 정리하는 식으로 작성되었다는 것을 알려드립니다.
WAL
-
POSTGRESQL에서 WAL이란 WRITE AHEAD LOG의 약자로서, 시스템의 장애가 발생하더라도 데이터가 손실되지 않도록 하기 위한 기능이다. -
이는 데이터베이스의 ACID 속성중에 (
D)지속성으로 성공적으로 수행된 트랜잭션은 영원히 반영되어야 됨을 보장한다. -
WAL이란 용어는 일반적으로
REDO로그라고 불리며,XLOG(트랜잭션 로그)라고 부르는 경우도 있다. 이는 일반적으로 DBMS 종류에 따라서 다르게 부르며WAL이라는 용어는POSTGRES에서 사용하는 용어이다.
WAL이 만약 없다면 어떤일이 발생하는가?

-
데이터베이스에서
WAL이 없다면 어떤 일이 발생하는지 예제를 통해서 알아보자. -
우선 위와 같이
TABLE_A에 데이터를 넣는 두개의 트랜잭션이 있다고 가정을 하자. 먼저 INSERT 문을 수행할 떄 데이터베이스 클러스터에서는 테이블 A의 페이지를 메모리 내 공유 버퍼 풀로 로드하고 튜플을 페이지에 삽입한다. -
이때 삽입된 튜플은 바로 디스크에 저장하지 않고 메모리에 변경되었다는 상태만 기록한다. (더티 페이지)
-
그리고 나서, 두 번째 INSERT 문을 수행할 때 서버에 장애가 발생하면 삽입된 모든 데이터가 손실되게 된다. 따라서
WAL이 없으면 장애에 취약하다는 점을 알 수 있다. -
따라서 데이터베이스는 모든 수정사항을 기록하기 위해서 데이터로 영구 저장소에 기록을 한다.
-
삽입, 삭제, 수정 같은 변경사항이 일어나면,
WAL버퍼 내에 기록이 되고, 트랜잭션이 커밋 또는 중단될 떄 WAL 파일에 즉시 기록된다.
WAL 작동 원리
-
XLOG레코드의 `LSN(Long Sequence Number)는 트랜잭션 로그에서 해당 레코드가 기록되는 위치를 나타낸다. -
레코드의 LSN은 XLOG 레코드의 고유 ID로 사용된다.
참고 문헌
>> Home