저자:바딤 미헤예프와 올리버 엘픽
미리 젠 토토 로깅 (WAL)는 표준 접근 방식입니다. 트랜잭션 로깅에. 자세한 설명을 찾을 수 있습니다 거래 처리에 관한 대부분의 (전부는 아니지만) 책에서. 간략하게,WAL의 중앙 개념은 데이터 파일(테이블과 인덱스가 거주)는 해당 변경 사항이 완료된 후에만 작성해야 합니다. 기록됨 - 즉, 로그 레코드가 플러시된 경우 영구 저장. 우리가 이 절차를 따를 때, 우리는 모든 트랜잭션 커밋에서 데이터 페이지를 디스크로 플러시해야 합니다. 왜냐하면 충돌이 발생하면 우리는 할 수 있다는 것을 알고 있기 때문입니다. 로그를 사용하여 데이터베이스 복구: 아직 수행되지 않은 모든 변경 사항 데이터 페이지에 적용된 작업은 먼저 로그 레코드(이것은 REDO라고도 알려진 롤 포워드 복구입니다) 커밋되지 않은 트랜잭션으로 인한 변경 사항은 다음과 같습니다. 데이터 페이지에서 제거됨(롤백 복구 - 실행 취소).
사용의 첫 번째 확실한 이점WAL숫자가 크게 감소했습니다.
      디스크 젠 토토(로그 파일만 플러시하면 되므로)
      트랜잭션 커밋 시 디스크; 다중 사용자
      환경에서는 많은 트랜잭션의 커밋이
      단 한 번으로 완성됨fsync()로그 파일의. 더욱이,
      로그 파일은 순차적으로 작성되므로 동기화 비용이 발생합니다.
      로그는 데이터를 플러시하는 비용보다 훨씬 적습니다.
      페이지.
다음 이점은 데이터 페이지의 일관성입니다. 는 사실은 그 전에는WAL, 포스트그레SQL절대 할 수 없었습니다 충돌 발생 시 일관성을 보장합니다. 이전WAL, 다음 중 충돌이 발생했습니다. 글을 쓰면 다음과 같은 결과가 발생할 수 있습니다.
존재하지 않는 테이블 행을 가리키는 인덱스 튜플
분할 작업에서 인덱스 튜플이 손실됨
테이블 또는 인덱스 페이지 내용이 완전히 손상되었습니다. 부분적으로 작성된 데이터 페이지 수
색인 관련 문제(문제 1 및 2)가 발생할 수 있습니다.
      추가로 수정되었습니다.fsync()호출하지만 어떻게 해야 할지 명확하지 않습니다.
      없이 마지막 사건을 처리합니다.WAL; WAL전체 데이터 페이지 내용을 다음에 저장합니다.
      페이지 일관성을 보장하기 위해 필요한 경우 로그
      충돌 후 복구.
UNDO 작업이 구현되지 않았습니다. 이는 변화를 의미합니다. 중단된 트랜잭션으로 인해 발생한 트랜잭션은 여전히 디스크 공간을 차지하며 여전히 영구가 필요합니다.pg_clog상태를 유지할 파일 트랜잭션을 재사용할 수 없기 때문에 트랜잭션 식별자. UNDO가 구현되면,pg_clog더 이상 필요하지 않습니다. 영구적인; 제거가 가능합니다pg_clog종료 시. (단, 긴급하게 이러한 우려는 의 채택으로 크게 감소되었습니다. 분할된 저장 방법pg_clog--- 더 이상 유지할 필요가 없습니다. 오래된pg_clog주변 항목 영원히.)
UNDO를 사용하면 구현도 가능합니다저장점부분 롤백을 허용합니다. 잘못된 트랜잭션 작업(다음으로 인한 파서 오류) 명령을 잘못 입력함, 중복된 기본/고유 삽입 키 등) 계속하거나 유효하게 커밋할 수 있는 기능 오류가 발생하기 전에 트랜잭션에 의해 수행된 작업입니다. 에서 현재 오류가 발생하면 전체 거래가 무효화되며 거래 중단이 필요합니다.
WAL제공 데이터베이스 온라인 백업을 위한 새로운 방법의 기회 복원(바). 이것을 사용하려면 방법을 사용하려면 데이터 파일을 주기적으로 저장해야 합니다. 다른 디스크, 테이프 또는 다른 호스트에 저장하고 또한 아카이브합니다.WAL로그 파일. 는 데이터베이스 파일 복사본 및 보관된 로그 파일을 사용할 수 있습니다. 충돌 후 복원하는 것처럼 복원합니다. 각각 새 데이터베이스 파일 복사본이 만들어진 시간 이전 로그 파일 제거될 수 있습니다. 이 시설을 구현하려면 다음이 필요합니다. 데이터 파일 및 인덱스 생성 및 삭제 로깅 그럴 것이다 또한 데이터를 복사하는 방법도 개발해야 합니다. 파일(운영 체제 복사 명령은 적합하지 않습니다.)
이것을 실현하는 데 어려움이 있습니다 이점은 저장이 필요하다는 것입니다.WAL상당한 기간 동안의 항목 시간(예: 가능한 가장 긴 트랜잭션인 경우) 트랜잭션 UNDO를 원합니다). 현재WAL형식은 매우 부피가 큽니다. 많은 디스크 페이지 스냅샷을 포함합니다. 이것은 심각한 것이 아닙니다. 항목만 보관하면 되므로 현재로서는 우려할 사항입니다. 하나 또는 두 개의 체크포인트 간격에 대해; 하지만 이를 달성하기 위해 미래의 이익은 일종의 압축된 것입니다.WAL형식이 필요합니다.