Оптимизация PostgreSQL для 1С 8.3: альтернатива платному MS SQL
В связи с импортозамещением и высокой стоимостью лицензий Microsoft, 90% новых внедрений 1С:Предприятия происходит на базе бесплатного (open-source) PostgreSQL. Однако "коробочная" версия PostgreSQL не готова к архитектуре 1С и будет жестко тормозить без глубокой настройки `postgresql.conf`.
🐧 Выбор правильной сборки (Патченный PostgreSQL)
Нельзя просто скачать "ванильный" PostgreSQL с официального сайта и натравить на него 1С. Платформа 1С использует очень специфичные алгоритмы работы с временными таблицами и блокировками, под которые база данных должна быть адаптирована на уровне исходного кода.
Используйте только специальные сборки от вендоров, оптимизированные под требования фирмы "1С":
- Postgres Pro (Standard / Enterprise) — коммерческая отечественная сборка (есть в реестре ПО), лучшая техническая поддержка и максимальная скорость.
- Сборка от самой фирмы "1С" — бесплатный дистрибутив с сайта releases.1c.ru. Работает отлично, но обновляется не так оперативно.
Переходите на PostgreSQL с MS SQL?
Я помогу безболезненно мигрировать ваши базы 1С:УТ, ERP или БП на бесплатный PostgreSQL (Linux). Настрою СУБД так, чтобы она работала стабильно и быстрее, чем ваш старый Windows-сервер.
Обсудить миграцию →🛠️ Главные параметры postgresql.conf для 1С
После установки СУБД (желательно на Linux, например Ubuntu или Astra Linux) нужно обязательно поправить файл конфигурации. Вот "золотой стандарт" настроек:
В отличие от MS SQL, PostgreSQL использует двойное кэширование (свой кэш + кэш ОС).
Установите shared_buffers = 25% - 40% от общей оперативной памяти (RAM)
сервера. Никогда не ставьте больше 50%, иначе Linux начнет "свопить" память на жесткий
диск, что убьет производительность.
Лимит памяти для операций сортировки и хэширования в рабочих процессах. Если памяти не
хватает, Postgres начнет "сбрасывать" сортировку на диск. Для 1С рекомендуется значение
от 64MB до 128MB (не делайте его огромным, так как этот объем
выделяется на каждое подключение умноженное на количество узлов плана запроса).
Если ваши базы лежат на быстрых SSD (или NVMe), оптимизатору нужно жестко указать на
это. По умолчанию PostgreSQL думает, что работает на старых крутящихся HDD с медленным
случайным доступом.
Установите: seq_page_cost = 1.0 и random_page_cost = 1.1 (или
1.0 для NVMe). Это заставит планировщик чаще выбирать индексы, а не полное сканирование
таблиц!
Если 1С "затыкается" при массовом проведении документов (высокий Write-нагрузка):
Увеличьте min_wal_size = 2GB и max_wal_size = 4GB (можно и
больше, если позволяет диск). Установите checkpoint_timeout = 15min.
🧹 Планы обслуживания (Vacuum)
Главная проблема архитектуры PostgreSQL — "разбухание" таблиц (bloat) из-за особенностей MVCC. Старые версии строк физически не удаляются сразу при обновлении документа в 1С.
- Автовакуум (autovacuum) должен быть всегда ВКЛЮЧЕН.
Никогда его не выключайте. Сделайте его агрессивным (например,
autovacuum_vacuum_scale_factor = 0.05(5% вместо 20% по умолчанию)). - Обновление статистики: Настройте cron-скрипт или задачу
ANALYZEкаждую ночь, чтобы планировщик Postgres строил правильные планы для сложных запросов 1С.