Как рассчитать потребление трафика сервером PostgreSQL при интенсивной записи и как настроить лимиты в pg_hba.conf?

## Расчёт потребления трафика PostgreSQL при интенсивной записи

При интенсивной записи сервер PostgreSQL генерирует трафик нескольких типов: клиент-серверный (между приложением и СУБД), репликационный (между мастером и репликами) и служебный (WAL-архивирование).

### 1. Клиент-серверный трафик

Каждый INSERT/UPDATE/DELETE передаёт:
— SQL-запрос от клиента к серверу
— Ответ сервера (статус, количество затронутых строк)

Примерная формула:

Трафик (байт/с) = RPS × (avg_query_size + avg_response_size)

Где RPS — запросов в секунду, avg_query_size — средний размер SQL-запроса (~200–500 байт), avg_response_size — ответ (~50–100 байт для INSERT).

Пример: 1000 RPS × 600 байт = 600 КБ/с ≈ 4,8 Мбит/с.

### 2. Репликационный трафик (WAL)

WAL-трафик зависит от объёма изменяемых данных:

WAL-трафик ≈ объём изменённых данных × коэффициент_WAL

Коэффициент обычно составляет 1,5–3× от объёма «сырых» данных. Мониторинг через:
sql
SELECT pg_current_wal_lsn();
SELECT pg_wal_lsn_diff(pg_current_wal_lsn(), ‘0/0’);

### 3. Инструменты мониторинга трафика

— **pg_stat_activity** — активные соединения и запросы
— **pg_stat_bgwriter** — статистика записи буферов
— **pgBadger** — анализ логов
— **Prometheus + postgres_exporter** — метрики в реальном времени
— **iftop / nethogs** — системный мониторинг сетевого трафика

## Настройка pg_hba.conf

Файл `pg_hba.conf` управляет аутентификацией клиентов, но **не ограничивает трафик напрямую**. Однако он позволяет ограничить круг клиентов, тем самым косвенно снижая нагрузку.

### Структура записи:

ТИП БАЗА ПОЛЬЗОВАТЕЛЬ АДРЕС МЕТОД

### Примеры ограничений:

**Разрешить только локальные подключения:**

host all all 127.0.0.1/32 md5

**Ограничить доступ конкретной подсетью:**

host mydb appuser 192.168.1.0/24 scram-sha-256

**Запретить всем остальным:**

host all all 0.0.0.0/0 reject

### Ограничение числа соединений (косвенный лимит трафика)

В `postgresql.conf`:

max_connections = 100

Для конкретного пользователя:
sql
ALTER ROLE appuser CONNECTION LIMIT 20;

### Применение изменений без перезапуска:
sql
SELECT pg_reload_conf();

### Важные рекомендации:
— Всегда используйте `scram-sha-256` вместо устаревшего `md5`
— Применяйте принцип минимальных привилегий
— Используйте PgBouncer для пулинга соединений и снижения трафика
— Включите SSL (`hostssl`) для шифрования трафика между клиентом и сервером

Комбинируя мониторинг трафика и грамотную настройку `pg_hba.conf`, можно существенно оптимизировать нагрузку на сервер PostgreSQL.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.