Настройка PostgreSQL
Мало просто поставить PostgreSQL, ну для localhost, конечно достаточно. Но что бы базы работали как положено и как можно быстрее я сделал заметку по его настройке.
1. Настройка параметров под процессор и оперативную память
Под количество ядер CPU
max_worker_processes: Устанавливает общее число фоновых процессов. Рекомендуется значение, равное количеству ядер CPU (например,
max_worker_processes = 8
для 8-ядерного процессора).
max_parallel_workers_per_gather: Определяет максимальное число параллельных процессов для одного запроса. Оптимально — 4–8 (зависит от нагрузки).
max_parallel_workers: Общее число параллельных процессов. Не должно превышать
max_worker_processes
.
Пример для 16-ядер CPU:
max_worker_processes = 16 max_parallel_workers_per_gather = 4
max_parallel_workers = 16
Под объем оперативной памяти
shared_buffers: Выделяет память под кэш данных. Для серверов с 16+ ГБ ОЗУ — 25% памяти, но не более 8–12 ГБ.
work_mem: Память для сортировки и хеширования. Рассчитывается как:
work_mem = (Total RAM × 0.25) / max_connections
Например, для 32 ГБ ОЗУ и 100 соединений:work_mem = 80MB
.
maintenance_work_mem: Память для обслуживания (VACUUM, CREATE INDEX). Рекомендуется 1–2 ГБ.
effective_cache_size: Оценка доступной памяти для кэша ОС. Обычно 50–75% от ОЗУ.
Пример для сервера с 64 ГБ ОЗУ:
shared_buffers = 16GB work_mem = 256MB maintenance_work_mem = 2GB
effective_cache_size = 48GB
2. Временные таблицы: хранение в RAM-диске
Временные таблицы и сортировки по умолчанию используют диск, что замедляет операции. Решение — перенаправить их в RAM.
Создание RAM-диска (Linux)
mkdir /mnt/postgresql_tmpfs
mount -t tmpfs -o size=4G tmpfs /mnt/postgresql_tmpfs
Добавьте запись в /etc/fstab
для автоматического монтирования:
tmpfs /mnt/postgresql_tmpfs tmpfs defaults,size=4G 0 0
Настройка PostgreSQL
Измените postgresql.conf
:
temp_tablespaces = 'ram_disk'
Создайте tablespace:
CREATE TABLESPACE ram_disk LOCATION '/mnt/postgresql_tmpfs';
Теперь временные объекты будут использовать RAM-диск.
3. Создание пользователя и базы данных
Шаг 1: Создание пользователя
CREATE USER app_user WITH PASSWORD 'secure_password';
Шаг 2: Создание базы
CREATE DATABASE app_db WITH OWNER = app_user ENCODING = 'UTF8' CONNECTION LIMIT = 100;
Шаг 3: Выдача прав
GRANT CONNECT ON DATABASE app_db TO app_user;GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO app_user;
4. План обслуживания базы данных
Autovacuum
Автоочистка критична для производительности. Настройки в postgresql.conf
:
autovacuum = on
autovacuum_vacuum_scale_factor = 0.1 -- Запуск при 10% изменений
autovacuum_analyze_scale_factor = 0.05
autovacuum_max_workers = 4 -- Для высоконагруженных систем
Ручное обслуживание
Анализ статистики:
ANALYZE;
Очистка мусора:
VACUUM FULL VERBOSE;
Резервное копирование
Используйте pg_dump
для дампов:
pg_dump -U postgres -F c -f backup.dump app_db
Или настройте непрерывное архивирование через pg_basebackup
и WAL-файлы.
Планировщик задач (cron)
Пример задания для ежедневного бэкапа:
0 2 * * * pg_dump -U postgres app_db > /backups/app_db_$(date +\%F).sql
Заключение
Правильная настройка PostgreSQL — баланс между ресурсами железа и нагрузкой. Все изменения в конфигурации тестируйте на staging-среде. Используйте мониторинговые инструменты (pg_stat_activity, pgBadger) для анализа производительности. Не забывайте о регулярных бэкапах и актуальной документации!
Оптимизируйте с умом, и ваша PostgreSQL будет работать как часы.

Корпоративный почтовый сервер на минималках (postfix + dovecot + freeipa)
Postfix — агент передачи почты (MTA — mail transfer agent). Postfix является свободным программным обеспечением, создавался как альтернатива Sendmail.
Изначально Postfix …

bitrix24 + nginx + php-fpm
Битрикс шмитрикс, та еще головная боль. Но бизнес требует что бы проект был на битриксе, а ставить их битриксвм у …

Настрока фаервола nftables
nftables — подсистема ядра Linux, обеспечивающая фильтрацию и классификацию сетевых пакетов/датаграмм/кадров. Включена в ядро Linux, начиная с версии 3.13, выпущенной …