logical_decoding_work_mem
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | — | user | integer |
| 15 | — | user | integer |
| 16 | — | user | integer |
| 17 | — | user | integer |
| 18 | — | user | integer |
| 19 | — | user | integer |
logical decoding이 디코딩한 변경 내용을 로컬 디스크로 내려쓰기 전까지 사용할 수 있는 메모리 상한을 정한다. 기본값은 64MB다.
이 값은 logical streaming replication 연결 하나하나가 쓰는 메모리를 제한한다. 트랜잭션이 커밋되기 전까지 디코딩된 변경은 메모리에 쌓이는데, 이 한도를 넘으면 초과분이 디스크로 spill된다. 각 replication 연결은 이 크기의 buffer를 하나만 사용하고, 서버에 그런 연결이 동시에 많이 존재하는 경우는 드물기 때문에(max_wal_senders가 상한), work_mem보다 훨씬 크게 잡아도 안전하다. 값을 키우면 디코딩된 변경이 디스크로 쓰이는 양이 줄어든다.
운영 노트: 대량 배치나 장시간 트랜잭션이 많은 환경에서 logical replication 지연이 발생하면 이 값을 올려 디스크 spill을 줄이는 것이 첫 번째 조정 지점이다.
pg_stat_replication_slots의 spill_txns, spill_bytes로 spill 발생량을 확인한 뒤 조정하면 근거 있게 움직일 수 있다.출처: PostgreSQL 18 문서