Настройка postgresql.conf для 1С: готовый конфиг и оптимизация | AdminWiki

Оптимизированный рабочий postgresql conf для 1С: настройка под высокие нагрузки

19 декабря 2025 7 мин. чтения #1с #devops #postgresql #postgresql.conf #администрирование СУБД #настройка базы данных #оптимизация

Если ты администрируешь сервер 1С на PostgreSQL, то знаешь, что производительность системы напрямую зависит от правильной настройки СУБД. Давай разберем, как создать рабочий postgresql conf с настройками, идеально подходящими для типичных нагрузок 1С:Предприятие. Представь, что это твой личный чек-лист от Senior DevOps.

Почему стандартные настройки PostgreSQL не подходят для 1С?

Из коробки PostgreSQL настроен на универсальные задачи, но 1С генерирует особый тип нагрузки: много коротких транзакций, сложные запросы с джойнами, частые обновления индексов и высокий уровень конкурентности. Без тонкой настройки postgresql.conf ты получишь медленные отчеты, блокировки и неэффективное использование ресурсов сервера.

Ключевой принцип: Настройка — это баланс между оперативной памятью, дисковым I/O и процессорным временем. Мы будем отталкиваться от объема доступной RAM на сервере.

Подготовка: анализ ресурсов сервера

Прежде чем редактировать конфиг, определи параметры твоего железа:

  • Оперативная память (RAM): Допустим, у нас 16 ГБ. Для 1С рекомендуется минимум 8 ГБ, оптимально — 32 ГБ и более.
  • Количество CPU ядер: Определит параметры параллелизма.
  • Тип диска: SSD (рекомендуется) или HDD. Влияет на настройки, связанные с вводом-выводом.
  • Количество и размер баз данных 1С: Одна большая или несколько средних.

Рабочий postgresql conf с настройками под 1С (для сервера 16 ГБ RAM)

Ниже приведен готовый, сбалансированный конфигурационный файл. Замени значения, помеченные комментариями, в соответствии с твоим сервером.

config
# ========= РАБОЧИЙ POSTGRESQL CONF ДЛЯ 1С =========
# Базовые настройки подключений
# -----------------------------------------------
listen_addresses = '*'          # Слушать все интерфейсы
port = 5432
max_connections = 200           # Для 1С достаточно 100-300

# Управление памятью (ОСНОВНОЙ РАЗДЕЛ)
# -----------------------------------------------
shared_buffers = 4GB            # ~25% от RAM (16GB * 0.25 = 4GB)
effective_cache_size = 12GB     # ~75% от RAM
work_mem = 16MB                 # Память на операцию сортировки/хеширования
maintenance_work_mem = 512MB    # Память для операций обслуживания (VACUUM, CREATE INDEX)

# Настройки WAL (Write-Ahead Logging)
# -----------------------------------------------
wal_level = replica             # Необходим для репликации
max_wal_size = 4GB              # Автоматическая проверка точки
min_wal_size = 1GB
checkpoint_timeout = 15min      # Чаще чекапоинты для 1С
checkpoint_completion_target = 0.8
wal_buffers = 16MB              # По умолчанию, обычно достаточно

# Настройки запросов и планировщика
# -----------------------------------------------
default_statistics_target = 200 # Более точная статистика для сложных запросов 1С
random_page_cost = 1.1          # Для SSD уменьшаем (для HDD = 4.0)
effective_io_concurrency = 200  # Для SSD. Для HDD = 2

# Параллельное выполнение запросов
# -----------------------------------------------
max_worker_processes = 8        # Обычно равно числу ядер CPU
max_parallel_workers_per_gather = 4
max_parallel_workers = 8
parallel_leader_participation = on

# Настройки журналирования (логи)
# -----------------------------------------------
logging_collector = on
log_destination = 'stderr'
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_age = 1d
log_rotation_size = 100MB
log_min_duration_statement = 2000  # Логировать медленные запросы > 2 сек
log_checkpoints = on
log_connections = on
log_disconnections = on

# Автовакуум (КРИТИЧНО для 1С!)
# -----------------------------------------------
autovacuum = on
autovacuum_max_workers = 4      # Больше рабочих для активной БД
autovacuum_vacuum_cost_limit = 2000
autovacuum_vacuum_scale_factor = 0.05  # Запускать вакуум при 5% изменений
autovacuum_analyze_scale_factor = 0.02

# Производительность и блокировки
# -----------------------------------------------
idle_in_transaction_session_timeout = 5min  # Прерывать "висящие" сессии 1С
lock_timeout = 30s              # Максимальное время ожидания блокировки
deadlock_timeout = 3s
shared_preload_libraries = 'pg_stat_statements'  # Для анализа запросов

# Прочие важные настройки
# -----------------------------------------------
timezone = 'Europe/Moscow'      # Установи свой часовой пояс
datestyle = 'iso, mdy'
lc_messages = 'ru_RU.UTF-8'
lc_monetary = 'ru_RU.UTF-8'
lc_numeric = 'ru_RU.UTF-8'
lc_time = 'ru_RU.UTF-8'
default_text_search_config = 'pg_catalog.russian'
Внимание! После изменения postgresql.conf требуется перезагрузка сервиса PostgreSQL. Для применения некоторых параметров (например, shared_buffers) может потребоваться полный рестарт, а не reload.

Адаптация под другой объем памяти

Используй эту таблицу для быстрой адаптации ключевых параметров:

Параметр 8 ГБ RAM 16 ГБ RAM (наш пример) 32 ГБ RAM 64 ГБ RAM
shared_buffers 2 GB 4 GB 8 GB 16 GB
effective_cache_size 6 GB 12 GB 24 GB 48 GB
work_mem 8 MB 16 MB 32 MB 64 MB
maintenance_work_mem 256 MB 512 MB 1 GB 2 GB

Пошаговая инструкция применения настроек

  1. Создай резервную копию текущего конфига:
    bash
    sudo cp /etc/postgresql/14/main/postgresql.conf /etc/postgresql/14/main/postgresql.conf.backup_$(date +%Y%m%d)
  2. Отредактируй файл конфигурации: Скопируй приведенный выше рабочий postgresql conf, адаптируй под свои ресурсы и сохрани.
  3. Проверь синтаксис конфига:
    bash
    sudo -u postgres pg_ctl -D /var/lib/postgresql/14/main reload

    Если есть ошибки, они будут выведены в консоль.

  4. Примени изменения:
    bash
    # Для параметров, требующих рестарта
    sudo systemctl restart postgresql
    
    # Или, если reload достаточно (для части параметров)
    sudo systemctl reload postgresql
  5. Проверь работу и мониторь: Убедись, что сервер запустился, и подключись к базе 1С. Наблюдай за метриками.

Мониторинг и тонкая настройка после внедрения

Создание рабочего postgresql.conf — это только начало. Используй эти запросы для анализа:

sql
-- Проверка использования shared_buffers
SELECT name, setting, unit FROM pg_settings WHERE name LIKE '%shared_buffers%';

-- Наиболее частые медленные запросы (требует pg_stat_statements)
SELECT query, calls, total_exec_time, mean_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;

-- Эффективность автовакуума
SELECT schemaname, relname,
       last_vacuum, last_autovacuum,
       vacuum_count, autovacuum_count
FROM pg_stat_all_tables
ORDER BY autovacuum_count DESC;

-- Соотношение попадания в кэш (должно быть > 99%)
SELECT sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) as ratio
FROM pg_statio_user_tables;

Частые вопросы (FAQ) по настройке PostgreSQL для 1С

Можно ли использовать этот конфиг для PostgreSQL 13 или 15?

Да, абсолютно. Параметры, указанные в статье, являются стандартными и поддерживаются несколькими мажорными версиями. Однако всегда проверяй документацию для своей версии, особенно если используешь очень старую (9.6) или новейшую.

Что делать, если после настройки 1С работает еще медленнее?

Вероятно, проблема в нехватке памяти. Если ты завысил shared_buffers или work_mem, PostgreSQL может начать активно свопиться. Убедись, что сумма shared_buffers и памяти под кэш ОС не превышает физический объем RAM. Используй команду htop или free -h для контроля.

Как часто нужно делать VACUUM и ANALYZE вручную?

При правильной настройке autovacuum (как в нашем рабочем конфиге) ручное вмешательство требуется редко. Однако для очень крупных таблиц после массового удаления данных или в периоды пиковой нагрузки может потребоваться запустить VACUUM ANALYZE вручную в нерабочее время.

Где физически находится файл postgresql.conf?

Путь зависит от ОС и способа установки:

  • Ubuntu/Debian: /etc/postgresql/<версия>/main/postgresql.conf
  • CentOS/RHEL: /var/lib/pgsql/<версия>/data/postgresql.conf
  • Можно быстро найти командой: sudo -u postgres psql -c 'SHOW config_file;'
Итоговый совет: Не стремись к идеальным цифрам с первого раза. Настройка PostgreSQL — итеративный процесс. Внедри наш рабочий postgresql conf, понаблюдай за системой неделю под реальной нагрузкой, собери статистику и затем корректируй отдельные параметры (в первую очередь work_mem, autovacuum настройки). Документируй все изменения!

Используя это руководство, ты не просто скопируешь настройки, а поймешь логику их работы. Это позволит тебе самостоятельно адаптировать конфигурацию под любой сервер 1С и быстро решать возникающие проблемы с производительностью.

Поделиться:
Сохранить гайд? В закладки браузера