이 설정은 내장 streaming replication 기능의 동작을 제어한다(26.2.5절 참조). 서버는 마스터 서버거나 대기 서버다. 마스터 서버는 데이터를 전송할 수 있고, 대기 서버는 언제나 복제된 데이터의 수신자이다. cascading replication(26.2.7절 참조)을 사용하는 경우 대기 서버는 수신자 겸 전송자일 수 있다. 매개 변수는 주로 전송 및 대기 서버에 대한 것이며, 일부 매개 변수는 마스터 서버에서만 의미가 있다. 클러스터 간에 설정은 필요 시 별 문제 없이 다르게 할 수 있다.
이 매개 변수는 복제 데이터를 하나 이상의 대기 서버로 전송하는 서버에 설정할 수 있다. 마스터는 항상 전송 서버 이므로 이 매개 변수를 언제나 마스터에 설정해야 한다. 이 매개 변수의 역할 및 의미는 대기 서버가 마스터로 된 이후에 변경되지 않는다.
max_wal_senders
(integer
)
대기 서버 또는 스트리밍 베이스 백업 클라이언트로부터의 동시 연결 최대 수를 지정한다(예: 동시에 실행 중인 WAL 전송자 프로세스의 최대 수).
기본값은 10이다. 복제를 비활성화 하려면 0이다. WAL 전송자 프로세스는 총 연결 수에 포함되므로 매개 변수를 max_connections 빼기
superuser_reserved_connections 보다 큰 값으로 설정할 수 없다.
스트리밍 클라이언트의 연결이 갑작스럽게 끊어지면 타임아웃이 될 때까지 고아 연결 슬롯이 생기므로, 예상되는 클라이언트의 최대 수보다 이 매개 변수를 약간 더 크게 설정하여 연결이 끊어진 클라이언트가 즉시 재연결될 수 있도록 해야 한다.
이 매개 변수는 서버 시작 시에만 설정 가능하다.
또한 대기 서버로부터의 연결이 가능하도록 wal_level
은
replica
와 같거나 크게 설정해야 한다.
max_replication_slots
(integer
)
서버가 지원할 수 있는 복제 슬롯의 최대 수를 지정한다(26.2.6절 참조). 기본값은 10이다. 이 매개 변수는 서버 시작 시에만 설정 가능하다.
복제 슬롯의 사용이 가능하도록 wal_level
은 replica
와 같거나 크게 설정해야 한다. 현재 존재하는 복제 슬롯 수보다 작은 값으로 설정하면 서버가 시작되지 않는다.
wal_keep_segments
(integer
)
대기 서버가 streaming replication을 위해 과거 로그 파일을 가져와야 하는 경우 pg_wal
디렉터리에 저장되는 과거 로그 파일 세그먼트의 최소 수를 지정한다.
각 세그먼트는 보통 16메가바이트이다. 전송 서버에 연결된 대기 서버가 wal_keep_segments
세그먼트에 휠씬 못 미치면 전송 서버는 대기 서버에 의해 필요한 만큼 WAL 세그먼트를 삭제하고, 이때 복제 연결이 중단된다.
다운스트림 연결도 결과적으로 실패한다. (단, 대기 서버는 WAL 아카이빙이 사용 중인 경우 아카이브에서 세그먼트를 가져와서 복구할 수 있다.)
이것은, pg_wal
에 저장되는 최소 세그먼트 수만 지정한다. 시스템은 WAL 아카이브용으로 또는 checkpoint에서 복구용으로 세그먼트를 좀 더 보유해야 할 수 있다.
wal_keep_segments
가 0(기본값)인 경우 시스템은 대기 서버를 위한 추가 세그먼트를 유지하지 않으므로, 대기 서버에서 사용 가능한 예전 WAL 세그먼트의 수는 이전 checkpoint의 위치 및 WAL 아카이빙의 상태 함수이다.
이 매개 변수는 postgresql.conf
파일 또는 서버 커맨드 라인에서만 설정 가능하다.
wal_sender_timeout
(integer
)
지정된 밀리초 이상 작동되지 않은 복제 연결이 중단된다. 이것은 전송 서버가 대기 서버 충돌 또는 네트워크 중단을 검출할 때 유용하다. 0 값은 시스템 타임아웃 메커니즘을 비활성화한다.
이 매개 변수는 postgresql.conf
파일 또는 서버 커맨드 라인에서만 설정 가능하다. 기본값은 60초이다.
track_commit_timestamp
(boolean
)
트랜잭션 커밋 시간을 기록한다.
이 설정은 postgresql.conf
에서 지정하거나,
서버 실행 명령행 옵션으로만 지정할 수 있다.
기본값은 off
.
이 매개 변수는 복제 데이터를 하나 이상의 대기 서버로 전송하는 마스터/운영 서버에 설정할 수 있다. 이 매개 변수 외에, wal_level은 마스터 서버에 적절하게 설정되어야 하고 옵션으로 wal 아카이빙도 활성화될 수 있다(19.5.3절 참조). 사용자가 대기 서버가 마스터가 될 가능성에 대비하여 이 매개 변수를 설정하고 싶어 하더라도 대기 서버의 이 매개 변수 값은 아무 상관이 없다.
synchronous_standby_names
(string
)
26.2.8절에 설명된 대로 동기 복제를 지원할 수 있는
대기 서버 이름 목록을 지정한다. 활성 대기 서버는 하나 이상을 지정할 수 있다;
커밋 대기 중인 트랜잭션은 이 대기 서버들이 데이터 수신을 확인한 후에 진행이 허용된다.
동기 대기 서버는 이 목록에서 지정한 순서 대로 연결되어 있고 실시간으로 데이터를
스트리밍 전달하여 복제한다. (pg_stat_replication
뷰에서 streaming
상태로 표시됨).
동기 대기 서버가 어떤 이유로든 연결이 끊어진 경우
지정한 우선 순위에 따라 그 다음으로 높은 대기 서버로 즉시 대체된다.
대기 서버 이름을 2개 이상 지정하면 매우 높은 고가용성을 달성할 수 있다.
The name of a standby server for this purpose is the
application_name
setting of the standby, as set in the
standby's connection information. In case of a physical replication
standby, this should be set in the primary_conninfo
setting in recovery.conf
; the default
is walreceiver
. For logical replication, this can
be set in the connection information of the subscription, and it
defaults to the subscription name. For other replication stream
consumers, consult their documentation.
대기 서버 목록은 다음 형태로 지정한다:
[FIRST]num_sync
(standby_name
[, ...] ) ANYnum_sync
(standby_name
[, ...] )standby_name
[, ...]
where num_sync
is
the number of synchronous standbys that transactions need to
wait for replies from,
and standby_name
is the name of a standby server.
FIRST
and ANY
specify the method to choose
synchronous standbys from the listed servers.
The keyword FIRST
, coupled with
num_sync
, specifies a
priority-based synchronous replication and makes transaction commits
wait until their WAL records are replicated to
num_sync
synchronous
standbys chosen based on their priorities. For example, a setting of
FIRST 3 (s1, s2, s3, s4)
will cause each commit to wait for
replies from three higher-priority standbys chosen from standby servers
s1
, s2
, s3
and s4
.
The standbys whose names appear earlier in the list are given higher
priority and will be considered as synchronous. Other standby servers
appearing later in this list represent potential synchronous standbys.
If any of the current synchronous standbys disconnects for whatever
reason, it will be replaced immediately with the next-highest-priority
standby. The keyword FIRST
is optional.
The keyword ANY
, coupled with
num_sync
, specifies a
quorum-based synchronous replication and makes transaction commits
wait until their WAL records are replicated to at least
num_sync
listed standbys.
For example, a setting of ANY 3 (s1, s2, s3, s4)
will cause
each commit to proceed as soon as at least any three standbys of
s1
, s2
, s3
and s4
reply.
FIRST
and ANY
are case-insensitive. If these
keywords are used as the name of a standby server,
its standby_name
must
be double-quoted.
The third syntax was used before PostgreSQL
version 9.6 and is still supported. It's the same as the first syntax
with FIRST
and
num_sync
equal to 1.
For example, FIRST 1 (s1, s2)
and s1, s2
have
the same meaning: either s1
or s2
is chosen
as a synchronous standby.
The special entry *
matches any standby name.
There is no mechanism to enforce uniqueness of standby names. In case of duplicates one of the matching standbys will be considered as higher priority, though exactly which one is indeterminate.
Each standby_name
should have the form of a valid SQL identifier, unless it
is *
. You can use double-quoting if necessary. But note
that standby_name
s are
compared to standby application names case-insensitively, whether
double-quoted or not.
동기 대기 서버 이름이 여기서 지정되지 않으면 동기 복제는 활성화되지 않고 트랜잭션 커밋은 복제를 기다리지 않는다. 이것은 기본 환경 설정이다.
동기 복제가 활성화되더라도 개별 트랜잭션은 synchronous_commit 매개 변수를 local
또는 off
로 설정함으로써 복제를 기다리지 않도록 환경 설정할 수 있다.
이 매개 변수는 postgresql.conf
파일 또는 서버 커맨드 라인에서만 설정 가능하다.
vacuum_defer_cleanup_age
(integer
)
지정한 수 만큼의 트랜잭션에 대해서만 남기고, 나머지 트랜잭션으로 발생한
폐기 처분 된 로우(dead row)를 VACUUM
및 HOT 업데이트가
정리하도록 한다.
기본값은 0개 트랜잭션이다.
이 설정은 트랜잭션 처리가 끝나면, 즉시 폐기 처분 된 로우는
정리 대상이 됨을 의미한다.
사용자는 26.5절에 설명된 대로 핫 스탠바이가
지원하는 운영 서버에서 이 값을 0이 아닌 다른 값으로 설정하고 싶을 수도 있다.
이것은 행의 조기 클린업에 의한 충돌 없이 대기 서버에서 쿼리가 완료되는
시간적 여유를 허용한다. 그러나, 운영 서버에서 발생한 쓰기 트랜잭션
수에 관해서 값이 평가되므로, 대기 서버 쿼리에 대해 얼마만큼의 유예 시간이
가능한지를 예측하기는 어렵다. 이 매개 변수는 postgresql.conf
파일
또는 서버 커맨드 라인에서만 설정 가능하다.
이런 대기 서버의 충돌 문제를 피하는 다른 방법으로
hot_standby_feedback
설정을 활성화 하는 방법도 고려해 볼만 하다.
old_snapshot_threshold
설정이 활성화 되어 있다면,
이 설정이 0 이상이어도, 폐기 처분 된 로우에 대한
정리 작업은 진행됨으로 그 로우들을 보호하지는 못한다.
이 설정은 복제 데이터를 수신하는 대기 서버의 동작을 제어한다. 마스터 서버의 값은 무관하다.
hot_standby
(boolean
)
26.5절에 설명된 대로 복구 중에 사용자가 쿼리를 연결하고 실행할 수 있는지를 지정한다.
기본값은 on
이다. 이 매개 변수는 서버 시작 시에만 설정 가능하다.
복구 중 또는 대기 서버 모드에서만 효과가 있다.
max_standby_archive_delay
(integer
)
핫 스탠바이가 작동 중이면 26.5.2절에서 설명된 대로 이 매개 변수는 적용 직전의 WAL 항목과 충돌하는 대기 서버 쿼리를 취소하기 전에 대기 서버가 기다려야 하는 시간을 결정한다.
WAL 데이터를 WAL 아카이브에서 읽어오는 경우(따라서 현재가 아닌 경우) max_standby_archive_delay
가 적용된다. 기본값은 30초이다.
지정되지 않으면 단위는 밀리초이다. -1 값은 쿼리 충돌이 완료될 때까지 대기 서버가 무한정 대기하도록 허용한다. 이 매개 변수는 postgresql.conf
파일 또는 서버 커맨드 라인에서만 설정 가능하다.
취소 전 쿼리를 실행할 수 있는 시간 길이와 max_standby_archive_delay
는 동일하지 않는 점에 유의해야 한다. 오히려 이것은 WAL 세그먼트의 데이터를 적용하는 것이 허용된 최대 총 시간이다.
따라서 WAL 세그먼트 초반에 어떤 쿼리 때문에 상당한 지연이 발생한 경우 후속 충돌 쿼리는 유예 시간이 훨씬 짧아진다.
max_standby_streaming_delay
(integer
)
핫 스탠바이가 작동 중이면 26.5.2절에서 설명된 대로 이 매개 변수는 적용 직전의 WAL 항목과 충돌하는 대기 서버 쿼리를 취소하기 전에 대기 서버가 기다려야 하는 시간을 결정한다.
WAL 데이터를 스트리밍 복제를 통해 수신하는 경우 max_standby_streaming_delay
가 적용된다. 기본값은 30초이다. 지정되지 않으면 단위는 밀리초이다. -1 값은 쿼리 충돌이 완료될 때까지 대기 서버가 무한정 대기하도록 허용한다.
이 매개 변수는 postgresql.conf
파일 또는 서버 커맨드 라인에서만 설정 가능하다.
취소 전 쿼리를 실행할 수 있는 시간 길이와 max_standby_streaming_delay
는 동일하지 않은 점에 유의해야 한다. 오히려 이것은 운영 서버로부터 수신했던 WAL데이터를 적용하는 것이 허용된 최대 총 시간이다.
따라서 어떤 쿼리 때문에 상당한 지연이 발생한 경우 후속 충돌 쿼리는 대기 서버가 다시 따라잡을 때까지 유예 시간이 훨씬 짧아진다.
wal_receiver_status_interval
(integer
)
대기 서버의 WAL 수신자 프로세스가 복제 프로세스에 대한 정보를 운영 서버 또는 업스트림 스탠바이로 전송하는 최소 빈도를 지정한다.
이것은 pg_stat_replication
뷰를 사용하여 볼 수 있다.
대기 서버는 작성된 마지막 트랜잭션 로그 위치, 디스크에 기록한 마지막 위치 및 적용된 마지막 위치를 알려 준다. 이 매개 변수의 값은 리포트 지점간 초 단위의 최대 간격이다.
업데이트는 쓰기 또는 플러시(flush) 위치가 변경될 때마다 전송되거나 최소한 이 매개 변수가 지정한 빈도로 전송된다. 따라서 적용 위치는 실제 위치보다 약간 뒤처질 수 있다.
이 매개 변수를 0으로 설정하면 상태 업데이트가 완전히 비활성화된다. 이 매개 변수는 postgresql.conf
파일 또는 서버 커맨드 라인에서만 설정 가능하다. 기본값은 10초이다.
hot_standby_feedback
(boolean
)
핫 스탠바이가 대기 서버에서 현재 실행 중인 쿼리에 대해 운영 서버 또는 업스트림 스탠바이로 피드백을 전송할 것인지를 지정한다.
이 매개 변수는 클린업 레코드에 의해 야기된 쿼리 취소를 없애는 데 사용할 수 있지만 일부 작업 부하의 경우 운영 서버에서 데이터베이스 팽창을 초래할 수 있다.
피드백 메시지는 wal_receiver_status_interval
당 한 번 이상 전송되지 않는다. 기본값은 off
이다. 이 매개 변수는 postgresql.conf
파일 또는 서버 커맨드 라인에서만 설정 가능하다.
케스케이드형 복제를 사용 중인 경우 운영 서버에 도달할 때까지 피드백이 상류로 전달된다. 상류 전달 외에, 대기 서버는 수신하는 피드백을 다른 용도로 사용하지 않는다.
This setting does not override the behavior of
old_snapshot_threshold
on the primary; a snapshot on the
standby which exceeds the primary's age threshold can become invalid,
resulting in cancellation of transactions on the standby. This is
because old_snapshot_threshold
is intended to provide an
absolute limit on the time which dead rows can contribute to bloat,
which would otherwise be violated because of the configuration of a
standby.
wal_receiver_timeout
(integer
)
지정된 밀리초 이상 작동되지 않은 복제 연결이 중단된다. 이것은 대기 서버가 프라이머리 노드 충돌 또는 네트워크 중단을 검출할 때 유용하다.
0 값은 시스템 타임아웃 메커니즘을 비활성화한다. 이 매개 변수는 postgresql.conf
파일 또는 서버 커맨드 라인에서만 설정 가능하다. 기본값은 60초이다.
wal_retrieve_retry_interval
(integer
)
스트리밍 복제 로그나, 로컬 pg_wal
디렉터리나, WAL 아카이브로 쌓이는 트랜잭션 로그가 없을 때,
복제 작업을 다시 진행하기 위해서 기다리는 최대 시간을 지정한다.
이 매개 변수는 postgresql.conf
파일 또는 서버 커맨드
라인에서만 설정 가능하다.
기본값은 5 초다. 단위를 지정하지 않고 숫자만 사용하면 밀리초 단위로 처리된다.
이 설정은 대기 서버가 복구 작업을 진행할 때 새 WAL 자료를 기다리는 시간을 제어하는데 유용하다. 예를 들어, 아카이브 기반 복구 작업에서 이 시간을 줄여서 보다 민첩하게 새로운 WAL 로그 자료를 반영할 수 있다. 또는 트랜잭션 량이 그리 많지 않은 시스템에서는 이 값을 늘려 필요한 WAL 아카이브 조각들을 요청하는 작업을 좀 더 줄일 수 있다. 예를 들어 이런 요청 작업 자체가 과금 대상이 되는 클라우드 환경에서는 이 값을 적절히 조절해서 이용 요금을 최적화 할 수 있을 것이다.
These settings control the behavior of a logical replication subscriber. Their values on the publisher are irrelevant.
Note that wal_receiver_timeout
,
wal_receiver_status_interval
and
wal_retrieve_retry_interval
configuration parameters
affect the logical replication workers as well.
max_logical_replication_workers
(int
)
Specifies maximum number of logical replication workers. This includes both apply workers and table synchronization workers.
Logical replication workers are taken from the pool defined by
max_worker_processes
.
The default value is 4.
max_sync_workers_per_subscription
(integer
)
Maximum number of synchronization workers per subscription. This parameter controls the amount of parallelism of the initial data copy during the subscription initialization or when new tables are added.
Currently, there can be only one synchronization worker per table.
The synchronization workers are taken from the pool defined by
max_logical_replication_workers
.
The default value is 2.