47.9. 논리적 디코딩을 위한 대규모 토토 캔 스트리밍#

기본 출력 플러그인 콜백(예:begin_cb, change_cb, 커밋_cb그리고message_cb)는 토토 캔이 실제로 커밋될 때만 호출됩니다. 변경 사항은 여전히 토토 캔 로그에서 디코딩되지만 커밋 시 출력 플러그인에만 전달됩니다(토토 캔이 중단되면 삭제됩니다).

이는 디코딩이 점진적으로 발생하고 메모리 사용량을 제어하기 위해 디스크로 유출될 수 있지만, 디코딩된 모든 변경 사항은 토토 캔이 최종적으로 커밋될 때(더 정확하게는 커밋이 토토 캔 로그에서 디코딩될 때) 전송되어야 함을 의미합니다. 토토 캔 규모와 네트워크 대역폭에 따라 전송 시간으로 인해 적용 지연이 크게 늘어날 수 있습니다.

대규모 트랜잭션으로 인한 적용 지연을 줄이기 위해 출력 플러그인은 진행 중인 트랜잭션의 증분 스트리밍을 지원하는 추가 콜백을 제공할 수 있습니다. 필수 스트리밍 콜백이 여러 개 있습니다(stream_start_cb, stream_stop_cb, stream_abort_cb, stream_commit_cb그리고stream_change_cb) 및 두 개의 선택적 콜백(stream_message_cb그리고stream_truncate_cb). 또한 2단계 명령 스트리밍을 지원하려면 추가 콜백을 제공해야 합니다. (참조PostgreSQL : 문서 : 18 : 47.10. 논리적 스포츠 토토 사이트 대한 2 단계 커밋 지원자세한 내용은).

진행 중인 트랜잭션을 스트리밍할 때 변경 사항(및 메시지)은 다음으로 구분된 블록으로 스트리밍됩니다.stream_start_cb그리고stream_stop_cb콜백. 디코딩된 모든 변경 사항이 전송되면 트랜잭션은 다음을 사용하여 커밋될 수 있습니다.stream_commit_cb콜백(또는 다음을 사용하여 중단되었을 수도 있음)stream_abort_cb콜백). 2단계 커밋이 지원되는 경우 다음을 사용하여 트랜잭션을 준비할 수 있습니다.stream_prepare_cb콜백,커밋 준비됨다음을 사용하여commit_prepared_cb콜백 또는 다음을 사용하여 중단됨rollback_prepared_cb.

하나의 트랜잭션에 대한 스트리밍 콜백 호출의 한 가지 예시 시퀀스는 다음과 같습니다:

stream_start_cb(...);   <-- 변경 사항의 첫 번째 블록 시작
  stream_change_cb(...);
  stream_change_cb(...);
  stream_message_cb(...);
  stream_change_cb(...);
  ...
  stream_change_cb(...);
stream_stop_cb(...);    <-- 첫 번째 변경 블록 끝

stream_start_cb(...);   <-- 두 번째 변경 블록 시작
  stream_change_cb(...);
  stream_change_cb(...);
  stream_change_cb(...);
  ...
  stream_message_cb(...);
  stream_change_cb(...);
stream_stop_cb(...);    <-- 두 번째 변경 블록 끝

[아. 일반 커밋을 사용하는 경우]
stream_commit_cb(...);    <-- 스트리밍된 트랜잭션 커밋

[비. 2단계 커밋을 사용하는 경우]
stream_prepare_cb(...);   <-- 스트리밍 트랜잭션 준비
commit_prepared_cb(...);  <-- 준비된 트랜잭션 커밋

물론 콜백 호출의 실제 순서는 더 복잡할 수 있습니다. 여러 스트리밍 토토 캔에 대한 차단이 있을 수 있으며 일부 토토 캔이 중단될 수 있습니다.

디스크로 유출 동작과 유사하게 WAL에서 디코딩된 총 변경 사항(진행 중인 모든 트랜잭션에 대해)이 다음에 정의된 제한을 초과하면 스트리밍이 트리거됩니다.logical_decoding_work_mem설정. 이 시점에서 가장 큰 최상위 트랜잭션(현재 디코딩된 변경 사항에 사용되는 메모리 양으로 측정)이 선택되어 스트리밍됩니다. 그러나 메모리 임계값을 초과했지만 여전히 전체 튜플을 디코딩하지 않았기 때문에 스트리밍이 활성화된 경우에도 디스크에 유출해야 하는 경우도 있습니다. 예를 들어 토스트 테이블 삽입만 디코딩되었지만 기본 테이블 삽입은 디코딩되지 않았습니다.

대규모 토토 캔을 스트리밍하는 경우에도 변경 사항은 여전히 커밋 순서로 적용되어 비스트리밍 모드와 동일한 보장을 유지합니다.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.