Настройка PostgreSQL для 1С на сервере с Xeon Gold и 512 ГБ RAM

    При развёртывании PostgreSQL для работы с 1С на мощном оборудовании критически важна правильная настройка как гипервизора, так и самой базы данных. В этой статье мы разберём конфигурацию сервера с двумя Xeon Gold 6354 (72 ядра), 512 ГБ оперативной памяти и быстрыми SSD в RAID10, а также параметры postgresql.conf, которые позволили добиться результата теста Гилева в 6,43 единицы (против 113 на файловой базе).

    Аппаратная конфигурация и гипервизор

    Наш стенд построен на базе Proxmox. Виртуальной машине выделено 18 ядер (режим host), 260 ГБ ОЗУ и диски на SSD-массиве RAID10. Обратите внимание на ключевые параметры VM:

    • CPU: режим host (полная эмуляция инструкций хоста)
    • Balloon: отключён (0) - память не возвращается гипервизору
    • BIOS: OVMF (UEFI) для поддержки современных ОС
    • SCSI: virtio-scsi-single с io_uring и writeback - оптимально для высоких нагрузок

    Основные настройки PostgreSQL (postgresql.conf)

    Конфигурация базы данных заточена под 1С: платформа чувствительна к кешированию данных и параллельным запросам. Рассмотрим важнейшие блоки.

    Память и кеш

    shared_buffers = 64 ГБ (25% от 256 ГБ, выделенных VM). Это основной кеш страниц данных. Для 1С рекомендуется диапазон 25-40%. work_mem = 512 МБ - память для сортировок и хэшей на один запрос. effective_cache_size = 192 ГБ - подсказка планировщику о размере файлового кеша ОС.

    Параллелизм

    Поскольку 1С активно использует параллельные запросы (особенно в отчётах), мы задаём:

    • max_worker_processes = 18 (по числу ядер)
    • max_parallel_workers = 18
    • max_parallel_workers_per_gather = 4 - ограничение на один запрос
    • max_parallel_maintenance_workers = 4 - для VACUUM и индексов

    JIT отключён (jit = off), так как 1С не выигрывает от JIT-компиляции.

    Журнал WAL и контрольные точки

    Для быстрых SSD (4 ТБ в RAID10) используем агрессивные настройки:

    • checkpoint_timeout = 5 минут
    • checkpoint_completion_target = 0,9 - растягиваем запись на 90% интервала
    • max_wal_size = 4 ГБ, min_wal_size = 2 ГБ
    • commit_delay = 1000 мкс - группировка коммитов

    Планировщик и стоимость ввода-вывода

    Для SSD задаём random_page_cost = 1.1 (чуть выше seq_page_cost = 1.0), что заставляет планировщик предпочитать индексные сканирования. plan_cache_mode = force_custom_plan - для 1С это даёт более стабильные планы.

    Автовакуум и обслуживание

    1С генерирует много мёртвых кортежей, поэтому автовакуум настроен агрессивно:

    • autovacuum_max_workers = 9
    • autovacuum_naptime = 20 секунд
    • autovacuum_vacuum_scale_factor = 0.01 (1% изменений - запуск)
    • autovacuum_analyze_scale_factor = 0.005
    • autovacuum_vacuum_cost_limit = 900 - снимаем ограничения по скорости

    Статистика и логирование

    Включён сбор статистики с расширениями plantuner и online_analyze. Последний особенно полезен для временных таблиц, которые активно использует 1С. Параметры online_analyze.threshold = 50 и online_analyze.scale_factor = 0.1 гарантируют актуальную статистику без задержек.

    Результаты теста Гилева

    После применения описанной конфигурации тест Гилева на файловой базе показал 113 единиц, а на PostgreSQL - 6,43 единицы. Это означает, что база данных обрабатывает запросы в 17 раз быстрее файлового варианта. Ключевые факторы успеха: правильный расчёт shared_buffers, агрессивный параллелизм и оптимизация под SSD.

    Для достижения аналогичных результатов на вашем сервере подбирайте shared_buffers под доступную память, не забывайте про online_analyze и обязательно тестируйте с реальной нагрузкой 1С.

    Часто задаваемые вопросы