나는 여기에 인용 발견postgres Write-Ahead Log가 이중으로 다시 적용될 수 있습니까?
쿼리 다음 WAL 파일 킵이 말을의 PostgreSQL은 미리 쓰기 로그에 의존하는 데이터베이스 (WAL) 중 하나입니다 - 모든 변경 먼저 로그 (변화의 흐름)에 기록하고,에 만 데이터 파일. 크래시의 경우 데이터베이스가 WAL을 사용하여 복구를 수행 할 수 있으므로 내구성을 제공합니다. WAL에서 변경 사항을 읽고 데이터 파일에 다시 적용하기 때문에 내구성을 제공합니다. 이 문서 https://blog.2ndquadrant.com/basics-of-tuning-checkpoints/
하자에서
UPDATE page SET view_count = view_count + 1;
하지만 충돌 적용 직후.
DB가 최신 WAL 위치를 업데이트하지 않습니다. NOR 삭제 WAL 로그 파일이 아직 없습니다.
DB가 가동되면 복구가 완료되고이 WAL을 다시 적용합니다. 그렇지 않습니까? 데이터베이스의 최종 값은 view_count + 2
이됩니까?
알려 주시기 바랍니다
의미가 있습니다. 고맙습니다. – chaintng
질문이 하나 더 있습니다. 정말 큰 테이블 전체에 대한 데이터를 업데이트하는 경우 (예 : 테이블 크기 2GB) 'full_page_writes'는 메모리 크기가 충분히 크지 않기 때문에이 연산을 제한할까요? – chaintng
아니요, 'full_page_writes'에는 쓰여진 페이지 수에 대한 제한이 없습니다. Postgre의 각 테이블은 고정 크기 [pages] (https://www.postgresql.org/docs/current/static/storage-page-layout.html) 배열로 저장됩니다. 특정 행은 모든 페이지에 저장할 수 있습니다. 이 페이지는 첫 수정시 WAL에 기록됩니다. 따라서 전체 표 (각 행)가 수정되면 모든 해당 페이지가 WAL에 기록됩니다. – Nikita