Fix memory accumulation in pg_sync_replication_slots() during retries.
Amit Kapila <akapila@postgresql.org>
Fix memory accumulation in pg_sync_replication_slots() during retries. Unlike the slotsync worker, whose retry cycles are separated by transaction boundaries, pg_sync_replication_slots() retries within a single SQL function call. Per-cycle allocations for slot names, plugin names, database names, and auxiliary list containers get accumulated across retries until the function returned. Memory growth is proportional to the number of retries and remote slots, and the function may wait an extended period between cycles when slots are slow to persist. Fix by running each retry cycle in a short-lived memory context (sync_retry_ctx) that is reset before the next attempt. Additionally, release tuple slots created with MakeSingleTupleTableSlot() before clearing the walreceiver result. Author: Xuneng Zhou <xunengzhou@gmail.com> Reviewed-by: Zhijie Hou <houzj.fnst@fujitsu.com> Reviewed-by: shveta malik <shveta.malik@gmail.com> Reviewed-by: Amit Kapila <amit.kapila16@gmail.com> Discussion: https://postgr.es/m/CABPTF7VVPxgfYyr8Kyi=+JACjckQ6NpniV9eRtHboj2hMn0REw@mail.gmail.com
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/replication/logical/slotsync.c | modified | +24 −4 |
Discussion
- Bound memory usage during manual slot sync retries 16 messages · 2026-05-15 → 2026-05-29