2016-10-05 2 views
1

저는 PostgreSQL의 응급 복구 메커니즘을 둘러 보았습니다. WAL 로깅에서 쿼리를 기반으로하는 트랜잭션 START에서 WAL 버퍼는 XLOG 레코드로 채워집니다. 트랜잭션 COMMIT에서 WAL 버퍼가 플러시됩니다. 자, 일련의 삽입으로 트랜잭션을 시작한다고 가정 해보십시오. 기존 WAL 세그먼트가 채워지면 새로운 세그먼트가 만들어집니다. 그러나 무거운 데이터 또는 무언가 (4-5GB)를 대량으로 삽입하거나 복사 할 때 트랜잭션이 커밋되기 전에 WAL 버퍼 (1-2GB)가 채워지는 것은 어떻게됩니까? 이 경우 WAL은 어떻게됩니까?트랜잭션이 커밋되기 전에 WAL 버퍼가 채워집니다.

답변

3

WAL 버퍼가 가득 차면 디스크로 플러시됩니다. WAL 버퍼는 트랜잭션이 커밋 될 때만 비울 수 있다고 말하는 것은 없습니다. 중요한 것은 트랜잭션이 커밋 된 것으로보고되기 전에 트랜잭션과 관련된 모든 WAL 레코드가 플러시된다는 것입니다 (동기 커밋이라고 가정). 하지만 그 반대의 경우는 사실이 아닙니다 : 트랜잭션이 커밋되기 전에 WAL 레코드가 플러시 될 수 있습니다.

+0

WAL 버퍼가 디스크로 플러시 된 후 트랜잭션이 롤백되면 어떻게됩니까? 이 경우 롤백 트랜잭션과 관련된 로그를 어떻게 제거 할 것입니까? – user4658312

+0

그들은 제거되지 않습니다. 그러나 WAL에는 트랜잭션이 커밋 (clog)되었는지 여부에 대한 정보가 포함되어 있으며 수신 측에서 재생됩니다. –

관련 문제