TGViewer
rzv Data Engineering rzv Data Engineering @rzv_de · 3.03K subscribers
Post #480 918
Неочевидная причина, по которой может расти WAL в Postgres при использовании Debezium 2/2

🔸 Что нужно отправлять в дополнение к heartbeat сигналу

Расследуем проблему дальше. Применяем настройку, топик __debezium-heartbeat.<префикс> появляется, сообщения в него идут. На первый взгляд всё хорошо. При этом LSN стоит на прежнем месте, а удержанный WAL продолжает расти. Heartbeat пишется только в Kafka и хранит последнюю позицию, которую коннектор видел в WAL. Без событий из отслеживаемых таблиц эта позиция не меняется, и подтверждать Postgres по-прежнему нечего.

Но как лучше всего в СУБД сформировать изменение данных, не искажающее действительность? Для этого удобно завести отдельную служебную таблицу, добавить её в публикацию и в table.include.list, а в heartbeat.action.query раз в интервал обновлять в ней одну строку. Коннектор получает событие из WAL, подтверждает новую позицию, и слот сдвигается. На PostgreSQL 14 и новее можно обойтись без таблицы, если писать служебное сообщение прямо в WAL:


"heartbeat.interval.ms": "30000",
"heartbeat.action.query": "SELECT pg_logical_emit_message(false, 'heartbeat', now()::varchar)"


Оба варианта требуют права на запись, поэтому при чтении из реплики они не работают, и решать проблему приходится на стороне сервера или мониторинга.

🔸 Серверный ограничитель

Можно ли это решить на стороне Postgres? Есть настройка, которая может нам помочь, давайте её проверим. `max_slot_wal_keep_size` задаёт потолок удержанного WAL, после которого слот переходит в wal_status = lost и диск перестаёт расти. Недостаток в том, что продолжить чтение с потерянной позиции нельзя, коннектору понадобится новый снапшот. По умолчанию ограничитель выключен, так что неограниченный рост WAL за остановившимся слотом остаётся штатным поведением Postgres.

Если в захвате только редко меняющиеся таблицы, стоит проверить, двигается ли confirmed_flush_lsn у слота и сколько WAL он удерживает)

p.s. Релиз лабы по тому, как ломать и чинить Debezium коннектор, уже завтра. А пока - скидка 10% на лабу "Переход на шардированный ClickHouse"
rzvde.pro Переход на шардированный ClickHouse ReplicatedMergeTree + Distributed + Keeper, кластер из 4 нод 4-6ч
  • 🔥 5
  • 👎 1
More from @rzv_de
  1. Oct 4, 2026Как z-order помогает Iceberg пропускать лишние файлы Представим таблицу с детализацией зво…
  2. Oct 4, 2026photo post
  3. Sep 30, 2026Вышла лаба про CDC конвейер из PostgreSQL через Debezium и Kafka Connect в S3! Как и на др…
  4. Sep 29, 2026Неочевидная причина, по которой может расти WAL в Postgres при использовании Debezium 1/2…
  5. Sep 29, 2026photo post
  6. Sep 22, 2026Как равномерно размазывать данные Часто в командах, где я работал, проверяли равномерность…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →