Переход с привычных коммерческих СУБД, таких как MS SQL Server или IBM DB2, на PostgresPro часто вызывает вопросы у системных администраторов и специалистов 1С. В этой статье мы подробно разберем процесс первоначальной настройки сервера баз данных, научимся создавать пользователя для подключения сервера приложений 1С и проанализируем ключевые параметры оптимизации, которые помогут избежать «тупняков» и деградации производительности.
Первое, с чем мы сталкиваемся при установке PostgresPro на Linux (например, Xubuntu) — это наличие двух уровней учетных записей. Разберем этот момент подробнее. Существует системный пользователь postgres в операционной системе, который создается автоматически при установке пакета, и существуют внутренние роли (пользователи) самой СУБД. Для того чтобы сервер приложений 1С мог создавать базы и управлять ими, нам необходимо создать именно внутреннюю роль с правами суперпользователя.
Проанализируем шаги, необходимые для входа в консоль управления. После установки сервиса нам нужно переключиться под системного пользователя и запустить интерактивный терминал psql:
sudo -u postgres psql
Рассмотрим процесс создания учетной записи, от имени которой сервер 1С будет взаимодействовать с PostgresPro. В терминологии PostgreSQL пользователи называются «ролями» (roles). Для корректной работы платформы 1С, особенно при создании новых информационных баз через консоль администрирования 1С, пользователю требуются расширенные права.
Выполним следующую команду в консоли psql:
CREATE ROLE имя_пользователя WITH LOGIN SUPERUSER PASSWORD 'ваш_пароль';
Почему мы используем SUPERUSER? Разберем причину: сервер приложений 1С при создании базы данных выполняет ряд низкоуровневых операций, включая создание расширений (extensions), специфических схем и управление правами. Без прав суперпользователя процесс создания базы может завершиться ошибкой доступа.
Если вы предпочитаете использовать стандартные утилиты командной строки вместо SQL-запросов, рассмотрим альтернативный вариант через команду createuser:
sudo -u postgres createuser --superuser --pwprompt имя_пользователя
Создания пользователя недостаточно для того, чтобы 1С смогла подключиться к серверу. Выясним причину: по умолчанию PostgreSQL часто настроен на авторизацию ident, которая проверяет соответствие имени пользователя ОС и имени в БД, что не подходит для подключения по сети. Нам нужно разрешить подключение по паролю.
Найдем и отредактируем файл pg_hba.conf (обычно он находится в /var/lib/pgpro/std-11/data/ или аналогичном пути в зависимости от версии). Нам нужно добавить или изменить строку для доступа по протоколу TCP/IP:
# TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 md5
host all all 192.168.1.0/24 md5
В данном примере мы разрешаем подключения со всех баз данных для всех пользователей из локальной сети 192.168.1.0/24, используя метод авторизации md5 (пароль). После изменения файла обязательно выполним перезагрузку службы или выполним команду SELECT pg_reload_conf(); в консоли psql.
Рассмотрим ситуацию, упомянутую опытными администраторами: на MS SQL запрос выполняется 2 минуты, а на Postgres — 17 часов. Основная причина кроется в работе планировщика запросов (Query Planner) и особенностях архитектуры PostgreSQL. В отличие от DB2, где параметр DB2_WORKLOAD=1C делает «магию» за вас, в PostgresPro нужно обратить внимание на несколько критических настроек в postgresql.conf.
Проанализируем ключевые параметры:
off.Разберем пример настройки секции в postgresql.conf для высоконагруженной базы:
max_connections = 500
shared_buffers = 16GB # если на сервере 64GB
temp_buffers = 128MB
work_mem = 64MB
autovacuum_max_workers = 4
autovacuum_naptime = 20s
jit = off # Отключаем JIT, так как для коротких запросов 1С он часто вреден
Посмотрим на специфику запросов 1С. Платформа активно использует временные таблицы. В PostgreSQL статистика по временным таблицам не всегда обновляется вовремя, что заставляет планировщик выбирать неэффективные планы (например, полный скан таблицы Seq Scan вместо использования индекса).
Для решения этой проблемы в сборках PostgresPro 1C включены специальные патчи, улучшающие работу с временными таблицами 1С. Также рекомендуется использовать модуль plantuner, который позволяет подсказывать планировщику, какие индексы стоит использовать приоритетно.
Проанализируем еще один важный момент — «разогрев» кэша. В MS SQL кэш наполняется довольно эффективно сам по себе, но в Postgres после перезагрузки сервера первые обращения к тяжелым отчетам (например, «Карточка счета») могут быть медленными. Рассмотрим использование расширения pg_prewarm, которое позволяет принудительно загружать нужные таблицы в память при старте системы.
Мы выяснили, что установка PostgresPro — это только половина дела. Для успешной эксплуатации 1С нам необходимо:
SUPERUSER.pg_hba.conf, заменив ident на md5 или scram-sha-256.postgresql.conf под объемы данных и специфику 1С, обращая особое внимание на shared_buffers и autovacuum.Помните, что Postgres — это мощный инструмент, который при правильной настройке не уступает MS SQL, но он требует более глубокого понимания внутренних процессов СУБД от системного администратора.