4

Мониторинг слотов

pg_replication_slots, active_pid, restart_lsn, WAL бэклог

30 минУрок 4 из 6
Прогресс0%

Теория

Мониторинг слотов критически важен для предотвращения заполнения диска WAL-файлами.

Если слот неактивен太久, он накапливает WAL, которые не могут быть удалены.

Ключевые метрики: restart_lsn (начальная позиция), confirmed_flush_lsn (подтверждённая позиция), wal_status.

Используйте pg_stat_replication для отслеживания состояния подключённых реплик.

Практика

1. Подробная информация о слотах

Получите детальную информацию о всех слотах:

Подробная информация о слотах
Команда
sudo -u postgres psql -c "SELECT slot_name, active, restart_lsn, confirmed_flush_lsn, wal_status, safe_wal_size FROM pg_replication_slots;"
Вывод:
   slot_name   | active | restart_lsn | confirmed_flush_lsn | wal_status | safe_wal_size 
---------------+--------+-------------+---------------------+------------+---------------
 standby1_slot | t      | 0/1000000   |                     | reserved   |       1048576

2. Размер WAL-бэклога

Проверьте, сколько WAL накоплено для слота:

Размер WAL-бэклога
Команда
sudo -u postgres psql -c "SELECT slot_name, pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) AS restart_lag_bytes FROM pg_replication_slots WHERE active = true;"
Вывод:
   slot_name   | restart_lag_bytes 
---------------+-------------------
 standby1_slot |              1024

3. Мониторинг через представление

Используйте встроенное представление для мониторинга:

Мониторинг через представление
Команда
sudo -u postgres psql -c "SELECT * FROM pg_stat_replication;"
Вывод:
  pid  | usesysid |  usename  | application_name | client_addr | ... 
-------+----------+-----------+------------------+-------------+-----
 12345 |     1638 | replicator | walreceiver      | standby-ip  | ...

Проверка

Убедитесь, что размер бэклога минимален:

Проверка
Команда
sudo -u postgres psql -c "SELECT slot_name, pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) < 10485760 AS is_healthy FROM pg_replication_slots WHERE active = true;"
Вывод:
   slot_name   | is_healthy 
---------------+------------
 standby1_slot | t

Пройдите викторину

Для завершения урока необходимо пройти викторину