Конфигурация PostgreSQL — postgresql.conf
Раздел 8.11, шаг 3 из 12. Дальше — JSONB и партиционирование.
Где лежат настройки
| Файл / механизм | Содержание |
|---|---|
| postgresql.conf | Основные GUC-параметры |
| pg_hba.conf | Кто и как подключается (trust, scram, cert) |
| pg_ident.conf | Маппинг OS-пользователей |
| ALTER SYSTEM | Запись в postgresql.auto.conf |
| Per-role / per-db | ALTER ROLE … SET, ALTER DATABASE … SET |
Просмотр текущего значения и контекста:
SHOW shared_buffers;
SELECT name, setting, unit, context, source
FROM pg_settings
WHERE name IN ('shared_buffers', 'work_mem', 'max_connections');
context показывает, нужен ли restart (postmaster) или достаточно reload (SIGHUP).
Память
| Параметр | Назначение | Ориентир |
|---|---|---|
| shared_buffers | Кэш страниц данных | 25% RAM на dedicated сервер (не 40%+ — убывающая отдача) |
| work_mem | Память на sort/hash на операцию | 4–64 MB; осторожно: × параллель × соединения |
| maintenance_work_mem | VACUUM, CREATE INDEX, CLUSTER | 512 MB – 2 GB на больших таблицах |
| effective_cache_size | Подсказка планировщику «сколько кэша ОС» | 50–75% RAM |
| temp_buffers | Буферы temp-таблиц сессии | обычно default достаточно |
shared_buffers = 4GB
work_mem = 32MB
maintenance_work_mem = 1GB
effective_cache_size = 12GB
Сложный запрос с 8 hash join и max_parallel_workers_per_gather = 4 может съесть work_mem × 8 × 4 на одно соединение. При сотнях backend без пулинга риск swap и OOM-killer.
Соединения и параллелизм
max_connections = 100
Каждое соединение — отдельный процесс (~5–10 MB RAM минимум). При 500+ клиентах — PgBouncer (шаг 6), а не рост max_connections.
Параллельные запросы (PostgreSQL 9.6+):
max_parallel_workers_per_gather = 2
max_parallel_workers = 8
max_worker_processes = 16
I/O и планировщик
| Параметр | Смысл |
|---|---|
| random_page_cost | «Цена» случайного чтения страницы; на SSD снижают до 1.1–1.5 (default 4) |
| seq_page_cost | Стоимость sequential scan (обычно 1) |
| effective_io_concurrency | Ожидаемая параллельность prefetch; SSD — 100–200 |
На NVMe и облачных дисках завышенный random_page_cost толкает планировщик к seq scan там, где index scan выгоднее.
WAL и checkpoint
Связь с архитектурой:
wal_level = replica # минимум для физической репликации; logical — для logical replication
max_wal_size = 4GB
min_wal_size = 1GB
checkpoint_completion_target = 0.9
wal_compression = on # PG 15+, меньше I/O
| Параметр | Эффект |
|---|---|
| max_wal_size | Больше — реже checkpoint, но дольше recovery |
| checkpoint_completion_target | Растянуть запись dirty pages между checkpoint (0.9 — плавнее) |
| synchronous_commit | off ускоряет запись, риск потери последних транзакций при crash |
Autovacuum
Для OLTP с частыми UPDATE/DELETE подстройка autovacuum часто важнее «магических» shared_buffers:
autovacuum = on
autovacuum_max_workers = 4
autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.02
autovacuum_vacuum_cost_delay = 2ms
Per-table (агрессивнее для «горячих» таблиц):
ALTER TABLE orders SET (
autovacuum_vacuum_scale_factor = 0.01,
autovacuum_analyze_scale_factor = 0.005
);
Логирование для диагностики
log_min_duration_statement = 500ms
log_checkpoints = on
log_autovacuum_min_duration = 0
log_lock_waits = on
log_line_prefix = '%t [%p] %u@%d '
Для автоматического EXPLAIN медленных запросов — auto_explain (шаг 11).
Контейнеры и managed-сервисы
В Docker/Kubernetes часть параметров задаётся через переменные образа (POSTGRES_SHARED_BUFFERS в официальном образе — через -c). В RDS / Cloud SQL / Managed PostgreSQL часть GUC заблокирована — смотрите документацию провайдера.
Расширенный список параметров и команд администрирования — 3.08/2 Справочник PostgreSQL.
Практика
- На lab-инстансе:
pgbench -i -s 50, затемpgbench -c 10 -T 60, меняйтеshared_buffersиrandom_page_cost, фиксируйте TPS. EXPLAINтяжёлого join до/послеSET effective_cache_sizeиrandom_page_cost.- Сымитируйте bloat — серия UPDATE; подстройте autovacuum и сравните
n_dead_tup.
Связанные материалы
- Архитектура и WAL
- Профилирование
- Справочник PostgreSQL 3.08/2
- phpPgAdmin — pg_hba и config
- PostgreSQL в Docker — передача
-cи volumes для config
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). MVCC, XID, снимки данных, системные поля xmin/xmax, VACUUM и autovacuum, bloat, wraparound, процессы postmaster, Shared Buffers и WAL. pg_dump, pg_basebackup, PITR, pg_probackup, Wal-G, стратегия 3-2-1, восстановление в Kubernetes и после failover. pg_stat_statements, pg_stat_activity, auto_explain, pgBadger, Prometheus postgres_exporter, типовые метрики SLA и алерты. Ansible role для установки Postgres, шаблоны postgresql.conf, Terraform для RDS и managed PostgreSQL, GitOps паттерны для инфраструктуры БД. EXPLAIN и EXPLAIN ANALYZE, B-tree, GiST, SP-GiST, GIN, BRIN, частичные и составные индексы, типовые ошибки планировщика. Документная модель в Postgres, операторы и индексы JSONB, declarative partitioning по range/list/hash, связь с оконными функциями и CTE. Хранимые функции и процедуры PL/pgSQL, row-level и statement triggers, event triggers, асинхронные события через NOTIFY и LISTEN без polling. Streaming replication, logical replication, read replicas и Hot Standby, failover, connection pooling через PgBouncer — transaction и session pooling. Официальный образ postgres, volumes для PGDATA, переменные окружения, docker-compose с healthcheck, типовые ошибки контейнеризации СУБД. Managed PostgreSQL (RDS, Cloud SQL, Yandex Managed), StatefulSet, PersistentVolume, секреты, операторы Crunchy/Zalando, anti-patterns stateful в K8s. Patroni и DCS, сравнение с Greenplum и CockroachDB, когда нужен sharding, Citus, выбор архитектуры под OLTP и аналитику. Краткое резюме раздела 8.11 — архитектура, оптимизация, эксплуатация в контейнерах и Kubernetes, HA, бэкапы и автоматизация.Архитектура PostgreSQL и внутреннее устройство
Бэкапы PostgreSQL и восстановление
Профилирование и мониторинг PostgreSQL
Автоматизация PostgreSQL — Ansible и Terraform
Продвинутая оптимизация PostgreSQL и индексы
JSONB, партиционирование и расширения SQL в PostgreSQL
PL/pgSQL, триггеры и NOTIFY/LISTEN в PostgreSQL
Репликация PostgreSQL, Hot Standby и PgBouncer
PostgreSQL в Docker
PostgreSQL в облаке и Kubernetes
HA-кластеры PostgreSQL и распределённые СУБД
Практикум PostgreSQL — итоги