• 우선 글을 설명하기 앞서 아래 내용은 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