К статье
Практический материал

Администрирование · 12 мин

Как настроить PostgreSQL для 1С: практическое руководство

Как настроить PostgreSQL для работы с 1С: установка сборки 1C, параметры postgresql.conf, настройка памяти, autovacuum, типичные ошибки и проверка результата.

PostgreSQL — самая распространённая СУБД для клиент-серверных установок 1С:Предприятия на Linux и недорогая альтернатива MS SQL Server на Windows. Однако PostgreSQL «из коробки» настроен крайне консервативно: стандартные параметры рассчитаны на слабый сервер и объёмы данных в несколько мегабайт. Если развернуть базу 1С на таких настройках, пользователи столкнутся с медленными проведениями документов, долгими отчётами и блокировками.

Правильная настройка PostgreSQL для 1С сводится к трём вещам: использованию специальной сборки СУБД, корректировке ключевых параметров конфигурации под объём оперативной памяти сервера и регулярному обслуживанию базы. Ниже разобран каждый шаг с конкретными командами, критериями выбора значений и способами проверить результат.

Материал ориентирован на администраторов, которые разворачивают связку «сервер 1С + PostgreSQL» на Linux (Debian/Ubuntu-подобные дистрибутивы), но большинство рекомендаций применимо и к Windows-установкам.

Какую сборку PostgreSQL выбрать для 1С

Платформа 1С:Предприятие работает не с любой версией PostgreSQL, а только со сборками, в которые внесены патчи совместимости (например, обработка типа mchar и особенности работы с регистрами символов). Официально поддерживаются сборки от 1С (публикуются на портале releases.1c.ru) и Postgres Pro Standard/Certified. Ванильный PostgreSQL из стандартного репозитория дистрибутива с 1С работать не будет — база просто не создастся или будет падать с ошибками.

Перед установкой проверьте матрицу совместимости: конкретная версия платформы 1С поддерживает определённые версии PostgreSQL. Например, для свежих версий платформы 8.3 обычно актуальны PostgreSQL 12–16 в сборке 1С. Устанавливать самую новую мажорную версию СУБД, которую платформа ещё не поддерживает, — частая причина проблем.

Сравнение вариантов СУБД для 1С

PostgreSQL сборка 1С

Бесплатно, официально поддерживается. Ограничение: патчи выходят с задержкой, меньше инструментов мониторинга.

Postgres Pro Standard

Платно, дополнительные оптимизации и расширения, техподдержка. Подходит для крупных баз и высоких нагрузок.

MS SQL Server

Привычен Windows-администраторам, в ряде конфигураций показывает стабильную производительность. Требует лицензий на СУБД.

Установка и первичная подготовка сервера

Установка на Debian-подобных системах выполняется из пакетов, скачанных с портала 1С. После установки пакетов СУБД инициализируйте кластер с правильной локалью — это критично для 1С. Локаль должна быть ru_RU.UTF-8, иначе сортировка строк в базе будет отличаться от ожидаемой и возможны проблемы с поиском и индексами.

bash
sudo locale-gen ru_RU.UTF-8
sudo -u postgres /usr/lib/postgresql/15/bin/initdb -D /var/lib/postgresql/15/main --locale=ru_RU.UTF-8 --encoding=UTF8
sudo systemctl enable postgresql
sudo systemctl start postgresql

Задайте пароль суперпользователя postgres и при необходимости создайте отдельного пользователя для сервера 1С. Размещайте каталог данных PostgreSQL на быстром дисковом массиве (SSD/NVMe), а журнал предзаписи (WAL) при высокой нагрузке имеет смысл вынести на отдельный физический диск — это снижает конкуренцию за дисковые операции.

Ключевые параметры postgresql.conf для 1С

Файл postgresql.conf обычно находится в каталоге данных кластера или в /etc/postgresql/<версия>/main/. После правки большинства параметров требуется перезапуск службы (systemctl restart postgresql), часть параметров применяется перечитыванием конфигурации (systemctl reload).

Базовый ориентир для сервера, выделенного только под СУБД:

  • shared_buffers — 25–30% от объёма RAM. На сервере с 32 ГБ разумно начать с 8 ГБ. Слишком большое значение для PostgreSQL не даёт выигрыша, так как СУБД дополнительно использует кэш ОС.
  • effective_cache_size — 50–75% от RAM. Это подсказка планировщику, сколько памяти доступно под кэш (сама память не выделяется).
  • work_mem — память на одну операцию сортировки/хэширования. Начните с 32–64 МБ; учитывайте, что одно соединение может использовать несколько таких буферов.
  • maintenance_work_mem — 512 МБ – 2 ГБ для ускорения VACUUM, CREATE INDEX, REINDEX.
  • max_connections — не завышайте: 100–200 достаточно для большинства внедрений, так как сервер 1С мультиплексирует соединения через рабочие процессы.
  • wal_buffers — 16–64 МБ; checkpoint_timeout — увеличьте до 10–15 минут, чтобы снизить частоту контрольных точек.
  • random_page_cost — для SSD установите 1.1 вместо стандартных 4, это меняет выбор планов запросов в пользу индексных сканирований.
bash
# пример для сервера с 32 ГБ RAM
shared_buffers = 8GB
effective_cache_size = 20GB
work_mem = 64MB
maintenance_work_mem = 1GB
max_connections = 150
wal_buffers = 32MB
checkpoint_timeout = 15min
random_page_cost = 1.1
effective_io_concurrency = 200

Дополнительно в сборках 1С рекомендуется проверить параметры, влияющие на эстимацию планировщика: default_statistics_target можно увеличить до 100–200, а join_collapse_limit и from_collapse_limit оставить по умолчанию, если запросы 1С не показывают аномалий планирования.

Настройка autovacuum и обслуживание базы

PostgreSQL использует механизм MVCC: обновлённые и удалённые строки остаются в таблицах как «мёртвые» версии, пока их не уберёт процесс vacuum. Базы 1С интенсивно обновляют таблицы регистров, поэтому без агрессивного autovacuum таблицы раздуваются, а запросы деградируют.

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

bash
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 30s
autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.02
autovacuum_vacuum_cost_limit = 1000

Для самых больших и активно меняющихся таблиц (регистры накопления, сведений) имеет смысл задать индивидуальные параметры хранения через ALTER TABLE ... SET (autovacuum_vacuum_scale_factor = ...). Дополнительно раз в неделю или месяц, вне рабочего времени, полезно выполнять полный VACUUM ANALYZE базы и периодически REINDEX индексов сильно фрагментированных таблиц.

Сетевой доступ и интеграция с сервером 1С

Если сервер 1С и PostgreSQL на разных машинах, откройте сетевой доступ: в postgresql.conf установите listen_addresses = '*' (или конкретный адрес интерфейса), а в pg_hba.conf добавьте строку для подсети сервера приложений с методом аутентификации scram-sha-256 или md5. Не используйте trust в рабочей сети.

bash
# pg_hba.conf — разрешить подключение с сервера 1С
host  all  all  192.168.1.10/32  scram-sha-256

Создание информационной базы выполняется из консоли кластера 1С или конфигуратора: укажите адрес сервера СУБД, имя базы, пользователя и пароль. Убедитесь, что у пользователя СУБД достаточно прав — платформа сама создаст таблицы и схему. После создания базы загрузите данные из .dt или начните работу и проверьте скорость типовых операций.

Порядок развёртывания связки 1С + PostgreSQL
  1. 1
    Установите сборку PostgreSQL от 1С, совместимую с вашей версией платформы
  2. 2
    Инициализируйте кластер с локалью ru_RU.UTF-8
  3. 3
    Настройте postgresql.conf под объём RAM сервера
  4. 4
    Настройте pg_hba.conf и сетевой доступ для сервера 1С
  5. 5
    Создайте базу через консоль кластера 1С и загрузите данные
  6. 6
    Включите агрессивный autovacuum и настройте регламентное обслуживание
  7. 7
    Проверьте производительность типовых операций и настройте мониторинг

Как проверить, что настройка сработала

Признак удачной настройки — не красивые цифры в конфиге, а поведение системы под нагрузкой. Проверьте несколько контрольных точек.

Контрольные точки

Как проверить результат

Скорость проведения документов
Норма

Время проведения типового документа стабильно и сопоставимо с эталоном

Тревожный признак

Время растёт по мере работы или сильно скачет

Статистика autovacuum (pg_stat_user_tables)
Норма

n_dead_tup мала относительно n_live_tup, last_autovacuum свежая

Тревожный признак

Мёртвых строк накапливаются много, autovacuum давно не отрабатывал

Попадания в кэш (pg_stat_database, blks_hit/blks_read)
Норма

Доля чтений из памяти выше 95–99%

Тревожный признак

Много чтений с диска — shared_buffers мал или данных слишком много

Блокировки (pg_locks, pg_stat_activity)
Норма

Долгих ожиданий блокировок в часы пик нет

Тревожный признак

Сеансы висят в состоянии Lock, растёт очередь ожиданий

Для диагностики медленных запросов включите логирование: log_min_duration_statement = 1000 запишет в журнал все запросы длиннее секунды. По этим записям можно найти проблемные операции и разобрать их планы через EXPLAIN ANALYZE. Технологический журнал сервера 1С с событиями DBPOSTGRS дополнит картину со стороны платформы.

Полезно зафиксировать «эталон» до и после настройки: замерьте время проведения пачки документов, построения типового отчёта и закрытия месяца. Без таких замеров оценить эффект от изменений объективно невозможно.

Типичные ошибки и ограничения

Типичные ошибки
01
Использование ванильного PostgreSQL вместо сборки 1С — база не создаётся или падает с ошибками типов данных
02
Оставление стандартных shared_buffers = 128MB — вся работа идёт через диск, производительность катастрофически низкая
03
Чрезмерное завышение work_mem — при сотне соединений сервер уходит в нехватку памяти и OOM-killer убивает процессы PostgreSQL
04
Отключение autovacuum «для скорости» — таблицы раздуваются, и через несколько недель база деградирует сильнее, чем было
05
Неправильная локаль кластера — ошибки сортировки и сравнения строк, которые проявляются только после загрузки данных
06
Размещение данных и WAL на одном медленном HDD при высокой нагрузке — диск становится узким местом всей системы

Отдельно стоит сказать об ограничениях: самостоятельная настройка оправдана для баз малых и средних размеров с типовой нагрузкой. Если база занимает сотни гигабайт, работают сотни одновременных пользователей или есть нестандартные доработки, тюнинга postgresql.conf недостаточно — потребуется анализ планов запросов, возможна оптимизация кода конфигурации и привлечение специалиста по производительности 1С.

Маршрут решения

Как выбрать действие

База до 50–100 ГБ и до 50 пользователейДостаточно сборки 1С, базового тюнинга памяти и autovacuum по этой инструкции
Запросы медленные даже после настройкиВключите log_min_duration_statement, найдите тяжёлые запросы и анализируйте их планы
Мёртвые строки копятся быстрее, чем убирает autovacuumУвеличьте autovacuum_max_workers и задайте индивидуальные параметры для горячих таблиц
Нагрузка растёт, а сервер одинРассмотрите вынос PostgreSQL на отдельный сервер с быстрыми NVMe-дисками или переход на Postgres Pro
Итог

Что важно запомнить

Используйте только сборку PostgreSQL от 1С или Postgres Pro, инициализируйте кластер с локалью ru_RU.UTF-8, настройте shared_buffers, work_mem, effective_cache_size и агрессивный autovacuum под объём RAM и характер нагрузки. Перед любыми изменениями делайте резервную копию, а эффект оценивайте замерами времени типовых операций и статистикой pg_stat.

Частые вопросы

Подойдёт ли PostgreSQL из стандартного репозитория Ubuntu для 1С?

Нет. Платформе 1С требуется сборка с патчами совместимости — от 1С или Postgres Pro. На ванильной версии создание базы завершится ошибкой или будут сбои в работе со строковыми типами.

Сколько оперативной памяти нужно серверу PostgreSQL для 1С?

Универсальной цифры нет: ориентируйтесь на размер активной части базы. Практический минимум для небольшой базы — 8–16 ГБ, для средних внедрений — 32–64 ГБ. Главный критерий — высокий процент попаданий в кэш (blks_hit) в pg_stat_database.

Нужно ли перезапускать PostgreSQL после изменения postgresql.conf?

Зависит от параметра. Изменение shared_buffers, max_connections и ряда других требует полного перезапуска службы. Часть параметров (например, work_mem, log_min_duration_statement) применяется через reload. Узнать категорию параметра можно в представлении pg_settings (столбец context).

Как понять, что базе не хватает autovacuum?

Запросите pg_stat_user_tables: если n_dead_tup составляет значительную долю от n_live_tup, а last_autovacuum старый или пустой — autovacuum не справляется. Увеличьте число workers, снизьте scale_factor и naptime.

Можно ли размещать сервер 1С и PostgreSQL на одной машине?

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

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

Откатите последние изменения на прежние значения (поэтому конфиг стоит версионировать или комментировать), перезапустите службу и сравните замеры. Чаще всего деградацию вызывают завышенные work_mem и shared_buffers, из-за которых система уходит в своп.