Я создаю слот репликации и транслирую изменения с AWS Postgres RDS на java процесс через драйвер JDB C.
Мой код создания слота репликации выглядит следующим образом.
final ReplicationSlotInfo replicationSlotInfo = pgConnection.getReplicationAPI()
.createReplicationSlot()
.logical()
.withSlotName(replicationSlotName)
.withOutputPlugin("wal2json")
.make();
и я получаю поток репликации, используя следующий код.
pgConnection.getReplicationAPI()
.replicationStream()
.logical()
.withSlotName(replicationSlotName)
.withSlotOption("include-xids", true)
.withSlotOption("include-timestamp", true)
.withSlotOption("pretty-print", false)
.withSlotOption("add-tables", "public.users")
.withStatusInterval(10, TimeUnit.SECONDS)
.start()
Когда процесс репликатора java не запущен, размер WAL увеличивается. Вот запрос, который я использую, чтобы найти задержку репликации.
SELECT
slot_name,
pg_size_pretty(pg_xlog_location_diff(pg_current_xlog_location(), restart_lsn)) AS replicationSlotLag,
active
FROM
pg_replication_slots;
Вывод:
slot_name replicationslotlag active
data_stream_slot 100 GB f
Эта задержка репликации увеличивается за пределами диска RDS, который отключает RDS.
Я думал, что wal_keep_segments позаботится об этом, который был установлен на 32. Но это не сработало. Есть ли какое-либо другое свойство, которое мне нужно установить, чтобы избежать этой ситуации, даже если Java Процесс репликации не запущен.