Связка сервера 1С и PostgreSQL: установка, настройка, быстрая работа

· 10 мин

Содержание

Чаще всего 1С Сервер с PostgreSQL «тормозит» не из-за слабого железа, а потому, что PostgreSQL поставили из коробки и оставили настройки по умолчанию. Они рассчитаны на машину с парой сотен мегабайт памяти. Сервер приложений 1С здесь ни при чём, а база упирается в крошечные буферы.

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

Что проверить перед установкой

Решите заранее, где будут жить службы. На небольшом предприятии (до 20-30 пользователей) сервер 1С и PostgreSQL обычно стоят на одной машине. Дальше выгоднее разнести их: база любит быстрый диск и память, сервер приложений — процессор.

Чек-лист подготовки:

  • 🖥 ОС: Linux или Windows Server, разрядность 64 бита.
  • 💾 Диск: SSD или NVMe под каталог данных PostgreSQL. На HDD база будет упираться в диск при любой нагрузке.
  • 🧠 Память: от 8 ГБ для небольшой базы, дальше от числа пользователей и размера базы.
  • 🕒 Время и часовой пояс на сервере выставлены верно, служба времени работает.
  • 🌐 Статический IP или стабильное имя хоста: пользователи и кластер ходят по нему.
  • 🔒 Порты 1540, 1541, диапазон 1560-1591 (сервер 1С) и 5432 (PostgreSQL) разрешены в брандмауэре только для нужных адресов.

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

Перед установкой
Выполнено: 0 / 5

Установка PostgreSQL: Linux и Windows

Linux

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

sudo systemctl status postgresql

Если кластер БД не создался автоматически, инициализируйте его утилитой initdb под пользователем postgres. Кодировку и локаль задавайте сразу: сменить их у готового кластера нельзя, придётся пересоздавать.

sudo -u postgres initdb -D /var/lib/pgsql/data --locale=ru_RU.UTF-8 -E UTF8

Windows

Запустите установщик, выберите каталог данных на быстром диске, задайте пароль суперпользователя postgres и порт 5432. Локаль выбирайте русскую. Пароль запишите сразу: он понадобится на следующих шагах.

Не ставьте PostgreSQL в каталог на сетевом диске или в папку, которую сканирует антивирус. Сканирование файлов данных замедляет базу, а иногда ломает запись. Добавьте каталог данных в исключения антивируса.

Параметры postgresql.conf под нагрузку 1С

Файл лежит в каталоге данных кластера. После правки службу нужно перезапустить, часть параметров применяется и без перезапуска, но проще перезапустить всё сразу.

Перезапуск PostgreSQL оборвёт все сеансы пользователей в базах 1С. Делайте его вне рабочего времени и предупредите людей заранее.

Базовые значения для сервера с выделенной под СУБД памятью. Здесь RAM — объём оперативной памяти, которую вы отдаёте PostgreSQL:

ПараметрОриентирЗачем нужен
shared_buffersпримерно 25% от RAMОбщий кэш страниц базы
effective_cache_size50-75% от RAMПодсказка планировщику, сколько данных кэширует ОС
work_mem16-64 МБПамять на сортировки и соединения в одном запросе
maintenance_work_mem256 МБ - 1 ГБПамять для VACUUM и построения индексов
temp_buffers32-128 МБВременные таблицы, которые 1С создаёт постоянно
max_connections100-300Число соединений; 1С держит их через рабочие процессы
max_locks_per_transaction128-256Блокировки в транзакции; 1С открывает много таблиц
random_page_cost1.1 для SSDЧтобы планировщик чаще выбирал индексы

Пример для сервера с 16 ГБ памяти под СУБД:

shared_buffers = 4GB
effective_cache_size = 10GB
work_mem = 32MB
maintenance_work_mem = 512MB
temp_buffers = 64MB
max_connections = 200
max_locks_per_transaction = 256
random_page_cost = 1.1
checkpoint_completion_target = 0.9
wal_buffers = 16MB

Проверка арифметики: 25% от 16 ГБ — это 4 ГБ, 62% от 16 ГБ — около 10 ГБ. Значения лежат внутри ориентиров из таблицы.

Что не копировать из чужих «идеальных» конфигов

  • ❌ work_mem в гигабайты. Память выделяется на каждую операцию каждого соединения, при 200 соединениях получите нехватку памяти.
  • ❌ fsync = off ради скорости. При аварийном отключении питания база окажется повреждена.
  • ❌ synchronous_commit = off на боевой базе без понимания последствий: при сбое вы теряете последние подтверждённые транзакции. Для тестовой копии допустимо.

Для сборок PostgreSQL под 1С в документации платформы приводятся и отдельные требования к параметрам (например, к поведению строк и экранирования). Сверьтесь с текстом для вашей версии платформы, не переносите их по памяти.

Пользователь и база для 1С

Работать от postgres каждой базой неудобно и небезопасно. Заведите отдельную роль для сервера 1С. Подключитесь к консоли:

sudo -u postgres psql

Создайте роль с паролем:

CREATE ROLE user1c WITH LOGIN PASSWORD 'надёжный_пароль' CREATEDB;

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

CREATE DATABASE accounting OWNER user1c ENCODING 'UTF8' TEMPLATE template0;

Некоторые администраторы дают роли суперпользователя. Этого не требуется для обычной работы, а риск серьёзный: компрометация учётки 1С открывает доступ ко всему серверу СУБД. Выдавайте минимум прав, а суперпользователя оставьте для администрирования.

Пароль для роли делайте длинным и без спецсимволов, которые ломают передачу параметров в командной строке (кавычки, $, &). Проще взять 20-24 символа из букв и цифр.

Доступ в pg_hba.conf

По умолчанию PostgreSQL разрешает подключения только с самого сервера. Чтобы сервер 1С (если он на другой машине) мог подключиться, добавьте строку в pg_hba.conf, который лежит рядом с postgresql.conf:

# TYPE  DATABASE  USER     ADDRESS             METHOD
host    all       user1c   192.168.10.0/24     md5

Здесь 192.168.10.0/24 — подсеть, где находится сервер 1С. Лучше указать один адрес сервера с маской /32, чем всю подсеть.

Чтобы СУБД слушала сетевой интерфейс, в postgresql.conf проверьте строку:

listen_addresses = '*'

Либо укажите конкретный адрес вместо звёздочки. Применяются эти правки после перезагрузки конфигурации:

SELECT pg_reload_conf();

Изменение listen_addresses требует полного перезапуска службы. Порядок в pg_hba.conf важен: правила читаются сверху вниз, и срабатывает первое подходящее. Строки reject ставьте выше разрешающих.

Метод trust в рабочей среде не используйте: он пускает без пароля. Метод scram-sha-256 надёжнее md5, но используйте его, только если версия платформы и клиентской библиотеки его поддерживает. При сомнениях начните с md5 и проверьте подключение.

Кластер серверов 1С: добавление базы

Когда СУБД готова, переходим к серверу приложений. Служба «Агент сервера 1С:Предприятия 8.3» запускается вместе с системой и поднимает кластер: главный менеджер и рабочие процессы. Проверьте, что служба работает и слушает порт 1540.

Управление кластером ведётся через консоль администрирования серверов 1С либо утилитой rac (подробности — в справке rac help).

Порядок добавления базы в консоли:

  1. Откройте консоль администрирования серверов 1С, найдите свой сервер и откройте раздел «Кластеры».
  2. Выберите кластер, раскройте его и нажмите правой кнопкой на «Информационные базы».
  3. Выберите «Создать» → «Информационную базу».
  4. Заполните имя базы и описание.
  5. В поле «Защищённое соединение» оставьте значение по умолчанию, если TLS на уровне кластера не настраивался.
  6. Тип СУБД выберите PostgreSQL.
  7. В поле «Сервер баз данных» укажите адрес машины с PostgreSQL, в поле «Имя базы данных» — имя базы.
  8. Введите имя и пароль созданной роли (в примере — user1c).
  9. Отметьте «Создать базу данных в случае её отсутствия», если база ещё не создана.
  10. Сохраните. Затем в списке баз откройте свойства и включите разрешение выдачи лицензий сервером 1С.

После этого базу можно подключать из окна запуска 1С: «Добавить» → «Добавление в список существующей информационной базы», тип «На сервере 1С:Предприятия», и указать адрес кластера с именем базы.

Где разместить службы?

Тонкая настройка и мониторинг

Когда всё запустилось, начинается регулярное обслуживание. Без него база деградирует через пару месяцев.

Обслуживание таблиц

PostgreSQL накапливает мёртвые строки после обновлений и удалений. Автоочистка (autovacuum) должна быть включена. Для больших таблиц 1С (регистры, итоги) значения по умолчанию часто слишком мягкие:

autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.02
autovacuum_naptime = 30s

Раз в сутки полезно запускать сбор статистики для планировщика (ANALYZE), если нагрузка на базу меняется быстро. Полный VACUUM FULL блокирует таблицу, поэтому делайте его только в окне обслуживания.

Рабочие процессы 1С

Рабочие процессы настраиваются в свойствах кластера и рабочего сервера. Два параметра, которые стоит проверить в первую очередь:

  • 🔹 Допустимый объём памяти рабочих процессов. Превышение приводит к их перезапуску, пользователи видят обрыв сеанса.
  • 🔹 Число информационных баз на один процесс. При нескольких крупных базах лучше выделять процесс каждой.

Не нужно выставлять большие значения «на всякий случай»: перерасход памяти на сервере приложений приводит к подкачке, и скорость падает сильнее, чем от маленького лимита.

За чем следить

Что смотретьГдеТревожный признак
Долгие запросыpg_stat_activityЗапрос выполняется минутами
Ожидание блокировокpg_locks, технологический журнал 1СОчередь ожиданий растёт
Размер таблиц и индексовpg_total_relation_sizeРост быстрее объёма данных
Загрузка дискаСредства ОСПостоянно высокая очередь записи
ПамятьСредства ОСАктивное использование подкачки

Посмотреть активные запросы можно так:

SELECT pid, now() - query_start AS duration, state, left(query, 80) AS query
FROM pg_stat_activity
WHERE state <> 'idle'
ORDER BY duration DESC;

Выглядеть это должно как короткий список. Если в нём вечно висят запросы на минуты, начинайте с технологического журнала 1С и поиска тяжёлых операций.

Резервные копии с PostgreSQL делайте через pg_dump или физическое копирование с архивированием журнала. Копирование каталога данных на работающей службе даёт неконсистентную копию, и восстановить из неё базу не получится.

Ошибки подключения и что с ними делать

Эти ситуации встречаются чаще всего. Тексты ошибок приводятся по смыслу, у разных версий они немного отличаются.

Диагностика: выберите симптом

Если ошибка не из списка, смотрите два места: журнал PostgreSQL (каталог log в каталоге данных либо системный журнал) и журнал регистрации самой 1С. Первый скажет, что отвечает СУБД, второй покажет, что сервер приложений делал в этот момент.

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

Можно ли поставить PostgreSQL и сервер 1С на одну машину?
Да, для небольшого числа пользователей это нормальная схема. Выделите СУБД не меньше половины памяти и держите данные на SSD.
Сколько памяти отдавать shared_buffers?
Ориентир — примерно четверть оперативной памяти, выделенной под СУБД. Больше обычно не даёт выигрыша: остальное кэширует операционная система.
Нужно ли переставлять PostgreSQL при обновлении платформы 1С?
Не всегда. Сверьте версию PostgreSQL со списком поддерживаемых в документации новой платформы: если ваша версия в нём есть, СУБД остаётся как есть.
Чем PostgreSQL лучше файлового варианта?
Клиент-серверная схема выдерживает больше одновременных пользователей и крупные базы, а блокировки в ней точнее, чем в файловой.
Как узнать, что тормозит: 1С или СУБД?
Сравните загрузку по процессам: если нагружен процесс postgres, ищите проблему в запросах и настройках СУБД, если рабочие процессы 1С (rphost) — в серверном коде и памяти.