Связка сервера 1С и PostgreSQL: установка, настройка, быстрая работа
Содержание
Чаще всего 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С.
Установка 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_size | 50-75% от RAM | Подсказка планировщику, сколько данных кэширует ОС |
work_mem | 16-64 МБ | Память на сортировки и соединения в одном запросе |
maintenance_work_mem | 256 МБ - 1 ГБ | Память для VACUUM и построения индексов |
temp_buffers | 32-128 МБ | Временные таблицы, которые 1С создаёт постоянно |
max_connections | 100-300 | Число соединений; 1С держит их через рабочие процессы |
max_locks_per_transaction | 128-256 | Блокировки в транзакции; 1С открывает много таблиц |
random_page_cost | 1.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С, найдите свой сервер и откройте раздел «Кластеры».
- Выберите кластер, раскройте его и нажмите правой кнопкой на «Информационные базы».
- Выберите «Создать» → «Информационную базу».
- Заполните имя базы и описание.
- В поле «Защищённое соединение» оставьте значение по умолчанию, если TLS на уровне кластера не настраивался.
- Тип СУБД выберите
PostgreSQL. - В поле «Сервер баз данных» укажите адрес машины с PostgreSQL, в поле «Имя базы данных» — имя базы.
- Введите имя и пароль созданной роли (в примере —
user1c). - Отметьте «Создать базу данных в случае её отсутствия», если база ещё не создана.
- Сохраните. Затем в списке баз откройте свойства и включите разрешение выдачи лицензий сервером 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 или физическое копирование с архивированием журнала. Копирование каталога данных на работающей службе даёт неконсистентную копию, и восстановить из неё базу не получится.
Ошибки подключения и что с ними делать
Эти ситуации встречаются чаще всего. Тексты ошибок приводятся по смыслу, у разных версий они немного отличаются.
listen_addresses разрешает внешний интерфейс, а порт 5432 открыт в брандмауэре. С машины сервера 1С выполните проверку доступности порта, например telnet адрес 5432.pg_hba.conf нет подходящей строки для адреса клиента. Откройте журнал PostgreSQL: там написано, какое правило применилось и по какой причине отказано.SELECT pg_reload_conf();. Проверьте порядок: запрещающая строка выше разрешающей перекроет её.CREATEDB. Выдайте его командой ALTER ROLE user1c CREATEDB; либо создайте базу вручную.Если ошибка не из списка, смотрите два места: журнал PostgreSQL (каталог log в каталоге данных либо системный журнал) и журнал регистрации самой 1С. Первый скажет, что отвечает СУБД, второй покажет, что сервер приложений делал в этот момент.
Частые вопросы
Можно ли поставить PostgreSQL и сервер 1С на одну машину?
Сколько памяти отдавать shared_buffers?
Нужно ли переставлять PostgreSQL при обновлении платформы 1С?
Чем PostgreSQL лучше файлового варианта?
Как узнать, что тормозит: 1С или СУБД?
postgres, ищите проблему в запросах и настройках СУБД, если рабочие процессы 1С (rphost) — в серверном коде и памяти.