2025 년 5 월 8 일 :2542_2604 | PostgreSQL: PostgreSQL 18
지원 버전 :현재(17) /16 / 15 / 14
개발 버전 :18 / Devel
이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다현재버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

47.9. 논리적 디코딩을위한 대규모 트랜잭션 스트리밍#

기본 출력 플러그인 콜백 (예 :begin_cb, Change_CB, Commit_CBmessage_cb)는 거래가 실제로 저지른 경우에만 호출됩니다. 변경 사항은 여전히 ​​트랜잭션 로그에서 디코딩되지만 Commit의 출력 플러그인으로만 전달됩니다 (및 트랜잭션이 중단되는 경우 폐기).

이것은 디코딩이 점진적으로 발생하고 메모리 사용량을 제어하기 위해 디스크로 유출 될 수 있음을 의미합니다. 트랜잭션이 최종적으로 저격 할 때 (또는 더 정확하게는 트랜잭션 로그에서 커밋 될 때) 모든 디코딩 된 변경 사항이 전송되어야 함을 의미합니다. 트랜잭션의 크기와 네트워크 대역폭에 따라 전송 시간은 적용 지연을 크게 증가시킬 수 있습니다.

대규모 트랜잭션으로 인한 적용 지연을 줄이기 위해 출력 플러그인은 진행중인 트랜잭션의 증분 스트리밍을 지원하기 위해 추가 콜백을 제공 할 수 있습니다. 필요한 스트리밍 콜백이 여러 개 있습니다 (Stream_start_cb, Stream_Stop_cb, Stream_abort_cb, Stream_commit_cbandStream_change_cb) 및 2 개의 옵션 콜백 (Stream_Message_CBandStream_truncate_cb). 또한 2 단계 명령의 스트리밍이 지원 되려면 추가 콜백이 제공되어야합니다. (보다섹션 47.10자세한 내용).

진행중인 트랜잭션을 스트리밍 할 때 변경 (및 메시지)이 블록으로 스트리밍됩니다.Stream_start_cbandStream_Stop_cb콜백. 디코딩 된 모든 변경 사항이 전송되면 트랜잭션은를 사용하여 커밋 될 수 있습니다.Stream_commit_cb콜백 (또는Stream_abort_cb9884_9976Stream_prepare_cb콜백,준비사용commit_prepared_cb콜백 또는 |Rollback_prepared_cb.

스트리밍 콜백 호출의 한 예제 시퀀스 한 트랜잭션에 대해 다음과 같이 보일 수 있습니다 :

10350_11136

실제 콜백 호출 시퀀스는 물론 더 복잡 할 수 있습니다. 여러 스트리밍 트랜잭션에 대한 블록이있을 수 있으며 일부 거래는 중단 될 수 있습니다.

Spill-to-Disk 동작과 유사하게, WAL에서 해독 된 총 변경량 (모든 진행중인 트랜잭션의 경우)이 |logical_decoding_work_mem설정. 이 시점에서 가장 큰 최상위 트랜잭션 (현재 디코딩 된 변경에 사용되는 메모리 양으로 측정)이 선택되고 스트리밍됩니다. 그러나 경우에 따라 메모리 임계 값을 초과하지만 완전한 튜플을 디코딩하지 않았기 때문에 스트리밍이 활성화되어 있어도 디스크에 유출되어야합니다.

큰 트랜잭션을 스트리밍 할 때에도 변경 사항은 여전히 ​​커밋 순서로 적용되어 비 스트리밍 모드와 동일한 보증을 유지합니다.