기본 출력 플러그인 콜백 (예 :begin_cb
, Change_CB
, Commit_CB
및message_cb
)는 거래가 실제로 저지른 경우에만 호출됩니다. 변경 사항은 여전히 트랜잭션 로그에서 디코딩되지만 Commit의 출력 플러그인으로만 전달됩니다 (및 트랜잭션이 중단되는 경우 폐기).
이것은 디코딩이 점진적으로 발생하고 메모리 사용량을 제어하기 위해 디스크로 유출 될 수 있음을 의미합니다. 트랜잭션이 최종적으로 저격 할 때 (또는 더 정확하게는 트랜잭션 로그에서 커밋 될 때) 모든 디코딩 된 변경 사항이 전송되어야 함을 의미합니다. 트랜잭션의 크기와 네트워크 대역폭에 따라 전송 시간은 적용 지연을 크게 증가시킬 수 있습니다.
대규모 트랜잭션으로 인한 적용 지연을 줄이기 위해 출력 플러그인은 진행중인 트랜잭션의 증분 스트리밍을 지원하기 위해 추가 콜백을 제공 할 수 있습니다. 필요한 스트리밍 콜백이 여러 개 있습니다 (Stream_start_cb
, Stream_Stop_cb
, Stream_abort_cb
, Stream_commit_cb
andStream_change_cb
) 및 2 개의 옵션 콜백 (Stream_Message_CB
andStream_truncate_cb
). 또한 2 단계 명령의 스트리밍이 지원 되려면 추가 콜백이 제공되어야합니다. (보다섹션 47.10자세한 내용).
진행중인 트랜잭션을 스트리밍 할 때 변경 (및 메시지)이 블록으로 스트리밍됩니다.Stream_start_cb
andStream_Stop_cb
콜백. 디코딩 된 모든 변경 사항이 전송되면 트랜잭션은를 사용하여 커밋 될 수 있습니다.Stream_commit_cb
콜백 (또는Stream_abort_cb
9884_9976Stream_prepare_cb
콜백,준비
사용commit_prepared_cb
콜백 또는 |Rollback_prepared_cb
.
스트리밍 콜백 호출의 한 예제 시퀀스 한 트랜잭션에 대해 다음과 같이 보일 수 있습니다 :
10350_11136
실제 콜백 호출 시퀀스는 물론 더 복잡 할 수 있습니다. 여러 스트리밍 트랜잭션에 대한 블록이있을 수 있으며 일부 거래는 중단 될 수 있습니다.
Spill-to-Disk 동작과 유사하게, WAL에서 해독 된 총 변경량 (모든 진행중인 트랜잭션의 경우)이 |logical_decoding_work_mem
설정. 이 시점에서 가장 큰 최상위 트랜잭션 (현재 디코딩 된 변경에 사용되는 메모리 양으로 측정)이 선택되고 스트리밍됩니다. 그러나 경우에 따라 메모리 임계 값을 초과하지만 완전한 튜플을 디코딩하지 않았기 때문에 스트리밍이 활성화되어 있어도 디스크에 유출되어야합니다.
큰 트랜잭션을 스트리밍 할 때에도 변경 사항은 여전히 커밋 순서로 적용되어 비 스트리밍 모드와 동일한 보증을 유지합니다.