DebeziumReplicationSlotWalRetainedWarning, DebeziumReplicationSlotWalRetainedCritical
Что означает алерт
Слот debezium_iams удерживает WAL сверх порога: более 2 ГБ в течение 10 минут (warning) или более 6 ГБ в течение 5 минут (critical).
Лимит max_slot_wal_keep_size на кластере c9qa2coo5ukgcg93fldm равен 10 ГБ. При его достижении PostgreSQL сбрасывает слот, после чего требуются пересоздание слота и повторный снапшот. Диску кластера алерт не угрожает: лимит задан именно для этого.
Нормальное значение: десятки мегабайт.
Лейблы алерта: slot_name.
Диагностика (по шагам)
Команды описаны в разделе 2 общего документа: Debezium: устройство и типовые операции.
- Проверить слот и оценить запас:
SELECT active, wal_status,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS unconfirmed,
pg_size_pretty(safe_wal_size) AS before_lost
FROM pg_replication_slots WHERE slot_name = 'debezium_iams';
before_lost показывает, сколько WAL может быть записано до сброса слота.
- Определить причину по сочетанию признаков:
| Признаки | Причина | Действие |
|---|---|---|
active = false |
Debezium не подключён | DebeziumReplicationSlotInactive |
active = true, unconfirmed растёт |
Debezium не подтверждает позицию | DebeziumReplicationSlotNotAdvancing |
active = true, unconfirmed мал, retained велик |
позиция подтверждается, restart_lsn отстаёт из-за длинной транзакции в базе |
шаг 3 |
- Найти длинные транзакции:
SELECT pid, usename, state, now() - xact_start AS xact_age, left(query, 80) AS query
FROM pg_stat_activity
WHERE datname = 'sarex_db' AND xact_start IS NOT NULL
ORDER BY xact_start LIMIT 5;
restart_lsn не может продвинуться дальше начала самой старой открытой транзакции.
Как починить
- Слот неактивен или не подтверждает позицию: действовать по соответствующему ранбуку.
- Длинная транзакция: выяснить владельца по
usenameи запросу, согласовать завершение (SELECT pg_terminate_backend(<pid>);). Сессии приложений без согласования не завершать. - Если до сброса слота остаётся мало (
before_lostменее 1 ГБ), а причина не устранена, заранее предупредить потребителей о предстоящем повторном снапшоте. Лимитmax_slot_wal_keep_sizeбез согласования не повышать: он защищает диск общего кластера stage.
Критерий закрытия
- Значение
retainedуменьшается и возвращается к десяткам мегабайт. - Алерт перешёл в
inactive.