| 젠 토토 : 문서 : 9.6 : 젠 토토 | |||
|---|---|---|---|
| PostgreSQL : 문서 : 9.6 : 쓰기 호위 (토토 베이) | 사설 토토 사이트 : 문서 : 9.6 : 신뢰성 및 쓰기 로그 | 30장. 신뢰성 및 미리 쓰기 로그 | PostgreSQL : 문서 : 9.6 : 스포츠 토토 구성 |
비동기 사설 토토은 데이터베이스가 충돌할 경우 가장 최근의 트랜잭션이 손실될 수 있지만 트랜잭션을 더 빨리 완료할 수 있도록 하는 옵션입니다. 많은 애플리케이션에서 이는 허용 가능한 절충안입니다.
이전 섹션에서 설명한 대로 트랜잭션 커밋은 일반적으로동기식: 서버는 트랜잭션을 기다립니다.WAL클라이언트에 성공 표시를 반환하기 전에 영구 저장소로 기록을 플러시합니다. 따라서 클라이언트는 커밋된 것으로 보고된 트랜잭션이 직후 서버 충돌이 발생하는 경우에도 보존된다는 것을 보장합니다. 그러나 짧은 거래의 경우 이러한 지연은 전체 거래 시간의 주요 구성 요소입니다. 비동기 사설 토토 모드를 선택한다는 것은 트랜잭션이 논리적으로 완료되자마자 서버가 성공을 반환한다는 것을 의미합니다.WAL생성된 기록이 실제로 디스크에 저장되었습니다. 이는 소규모 트랜잭션의 처리량을 크게 향상시킬 수 있습니다.
비동기 사설 토토으로 인해 데이터 손실 위험이 발생합니다. 클라이언트에 대한 트랜잭션 완료 보고와 트랜잭션이 실제로 커밋되는 시간 사이에는 짧은 시간 간격이 있습니다(즉, 서버가 충돌하더라도 손실되지 않는다는 것이 보장됩니다). 따라서 클라이언트가 트랜잭션이 기억될 것이라는 가정에 의존하여 외부 작업을 수행하는 경우 비동기 사설 토토을 사용해서는 안 됩니다. 예를 들어 은행에서는 ATM의 현금 지급을 기록하는 트랜잭션에 대해 비동기식 커밋을 사용하지 않을 것입니다. 그러나 이벤트 로깅과 같은 많은 시나리오에서는 이러한 종류의 강력한 보장이 필요하지 않습니다.
비동기 사설 토토을 사용할 때 발생하는 위험은 데이터 손상이 아니라 데이터 손실입니다. 데이터베이스가 충돌하면 재생을 통해 복구됩니다.WAL플러시된 마지막 레코드까지. 따라서 데이터베이스는 자체 일관성 상태로 복원되지만 아직 디스크에 플러시되지 않은 트랜잭션은 해당 상태에 반영되지 않습니다. 따라서 최종 효과는 마지막 몇 개의 거래가 손실되는 것입니다. 트랜잭션은 커밋 순서에 따라 재생되므로 불일치가 발생할 수 없습니다. 예를 들어 트랜잭션 B가 이전 트랜잭션 A의 영향을 받아 변경한 경우 B의 효과가 보존되는 동안 A의 효과가 손실되는 것은 불가능합니다.
사용자는 각 트랜잭션의 커밋 모드를 선택할 수 있으므로 동기 및 비동기 사설 토토 트랜잭션을 동시에 실행할 수 있습니다. 이를 통해 성능과 거래 내구성의 확실성 사이에서 유연한 균형을 이룰 수 있습니다. 커밋 모드는 사용자가 설정할 수 있는 매개변수에 의해 제어됩니다.동기_사설 토토, 구성 매개변수를 설정할 수 있는 방식으로 변경될 수 있습니다. 하나의 트랜잭션에 사용되는 모드는의 값에 따라 다릅니다.동기_사설 토토트랜잭션 사설 토토이 시작될 때.
특정 유틸리티 명령, 예를 들어드롭 테이블는의 설정에 관계없이 동기식으로 강제 커밋됩니다.동기_사설 토토. 이는 서버의 파일 시스템과 데이터베이스의 논리적 상태 간의 일관성을 보장하기 위한 것입니다. 다음과 같은 2단계 커밋을 지원하는 명령거래 준비, 또한 항상 동기식입니다.
비동기 사설 토토과 트랜잭션 쓰기 사이의 위험 기간 동안 데이터베이스가 충돌하는 경우WAL기록, 해당 거래 중에 변경된 내용할 것이다잃어버려. 백그라운드 프로세스("WAL 작성자") 기록되지 않은 플러시WAL디스크에 기록 간격wal_writer_delay밀리초. 위험 기간의 실제 최대 기간은 3배입니다.wal_writer_delay왜냐하면 WAL 작성자는 바쁜 시간 동안 한 번에 전체 페이지를 작성하는 것을 선호하도록 설계되었기 때문입니다.
| 주의 |
|
즉시 모드 종료는 서버 충돌과 동일하므로 플러시되지 않은 비동기 사설 토토이 손실됩니다. |
비동기 사설 토토은 설정과 다른 동작을 제공합니다.fsync= 꺼짐.fsync은 모든 트랜잭션의 동작을 변경하는 서버 전체 설정입니다. 내부의 모든 논리를 비활성화합니다.PostgreSQL데이터베이스의 다른 부분에 대한 쓰기 동기화를 시도하여 시스템 충돌(즉, 오류가 아닌 하드웨어 또는 운영 체제 충돌)PostgreSQL자체) 데이터베이스 상태가 임의로 손상될 수 있습니다. 많은 시나리오에서 비동기 사설 토토은 끄면 얻을 수 있는 대부분의 성능 향상을 제공합니다.fsync, 하지만 데이터 손상 위험은 없습니다.
commit_delay또한 비동기 사설 토토과 매우 유사하게 들리지만 실제로는 동기 커밋 방법입니다(실제로는commit_delay비동기 사설 토토 중에는 무시됩니다.commit_delay트랜잭션이 플러시되기 직전에 지연이 발생함WAL해당 트랜잭션에 의해 실행되는 단일 플러시가 거의 동시에 사설 토토되는 다른 트랜잭션에도 제공될 수 있기를 바라면서 디스크에 저장합니다. 이 설정은 단일 플러시에 참여하려는 그룹에 트랜잭션이 참여할 수 있는 시간 창을 늘려 여러 트랜잭션 간에 플러시 비용을 분할하는 방법으로 생각할 수 있습니다.