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