Как настроить совместную работу MSSQL и PostgreSQL в одном кластере 1С без зависаний?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При эксплуатации крупных информационных систем нередко возникает ситуация, называемая в среде администраторов «зоопарком»: когда один сервер приложений 1С вынужден одновременно обслуживать базы данных, работающие на разных системах управления базами данных (СУБД) — например, Microsoft SQL Server (MSSQL) и PostgreSQL. Рассмотрим ситуацию, когда после добавления базы PostgreSQL в кластер, работающий с MSSQL, пользователи начинают жаловаться на «мертвые» зависания системы, которые устраняются только перезапуском службы. Выясним причины этого явления и разберем по шагам, как правильно настроить сервер, чтобы обеспечить стабильность обеих систем.

Проблема совместного использования разных драйверов в rphost

Разберем ситуацию с точки зрения архитектуры платформы 1С. Когда в рамках одного рабочего процесса rphost обслуживаются базы разных типов, этот процесс вынужден одновременно загружать в свою адресную память разные клиентские библиотеки (драйверы): sqlncli.dll для работы с MSSQL и libpq.dll для работы с PostgreSQL. Проанализируем, почему это приводит к проблемам:

  1. Конфликты управления памятью: Хотя сами библиотеки напрямую не конфликтуют, механизмы управления пулами соединений и аллокации памяти у них существенно различаются. В условиях высокой нагрузки «тяжелый» запрос к одной СУБД может вызвать блокировку ресурсов, необходимых для потоков, работающих с другой СУБД.
  2. Утечки и нестабильность: Платформа 1С исторически лучше оптимизирована под работу с MSSQL. Использование PostgreSQL (особенно в среде Windows) часто сопровождается нелинейным ростом потребления памяти. При смешанной нагрузке это бьет по стабильности всего рабочего процесса, приводя к тем самым «зависаниям», которые наблюдает автор темы.

Решение 1: Изоляция баз на уровне рабочих процессов

Самый быстрый, но компромиссный способ — это разнесение баз по разным рабочим процессам. По умолчанию 1С стремится распределить нагрузку равномерно, и в один rphost могут попасть сеансы как от MSSQL, так и от PG. Мы можем принудительно ограничить это поведение.

Рассмотрим, как это сделать через консоль администрирования кластера:

Внимание: У этого метода есть существенный минус — потребление оперативной памяти. Каждый процесс rphost потребляет значительный объем ОЗУ при старте. Если у вас десятки баз, серверу может просто не хватить ресурсов. Также помните об ограничениях лицензии уровня ПРОФ (не более 12 ядер процессора на один сервер приложений).

Решение 2: Создание нескольких служб 1С (Рекомендуемый метод)

Наиболее надежный и профессиональный метод — это запуск нескольких независимых экземпляров службы 1С (сервисов Windows) на одном физическом сервере. Разделим базы по типам СУБД: одну службу выделим под MSSQL, вторую — под PostgreSQL.

Для создания второй службы выполним следующие шаги:

  1. Регистрация новой службы: Используем утилиту sc create или специализированные скрипты для регистрации нового экземпляра ragent.exe.
  2. Разделение портов: Новая служба должна использовать свой диапазон портов. Если стандартная служба работает на портах 1540, 1541, 1560-1591, то для второй службы назначим, например, 1640, 1641, 1660-1691.
  3. Разделение каталогов данных: Это критически важный момент. Используйте параметр запуска -d, чтобы указать отдельный путь к реестру кластера (например, "C:\Program Files\1cv8\srvinfo_pg"). Это исключит пересечение кэшей и настроек.

Пример строки запуска для второй службы в реестре или через командную строку:


"C:\Program Files\1cv8\8.3.XX.XXXX\bin\ragent.exe" -srvc -agent -regport 1641 -port 1640 -range 1660:1691 -d "C:\Program Files\1cv8\srvinfo_custom"

Такой подход гарантирует, что любые проблемы (утечки памяти, зависания драйвера), возникшие в «мире PostgreSQL», физически не смогут затронуть рабочие процессы, обслуживающие MSSQL, так как они будут управляться разными процессами ragent и rmngr.

Оптимизация: Отключение лишних компонентов (Дата-акселератор)

В ходе обсуждения выяснилось, что лишнюю нагрузку и память может потреблять встроенный механизм — Дата-акселератор (DBDA). Это In-Memory СУБД, которая часто включена по умолчанию в настройках кластера, но фактически не используется без лицензий КОРП и специальных настроек.

Выясним, как снизить нагрузку:

Если вы не используете механизм копий баз и аналитические отчеты на базе акселератора, рекомендуется отключить этот компонент. Сделать это можно либо при установке платформы (сняв галочку с соответствующего модуля), либо через файл конфигурации conf.cfg, ограничив запуск лишних процессов. В высоконагруженных системах «чистота» запущенных модулей — залог стабильности.

Специфика PostgreSQL на Windows

Проанализируем ситуацию с выбором ОС для PostgreSQL. В сообществе 1С-администраторов считается аксиомой, что PostgreSQL на ОС Windows работает менее стабильно и медленнее, чем на Linux. Рассмотрим основные причины:

Совет: Если есть возможность, вынесите PostgreSQL на отдельный сервер под управлением Linux. Это снимет нагрузку с основного Windows-сервера и решит проблему конфликтов драйверов на уровне сервера приложений 1С.

Итоговые рекомендации

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

  1. Никогда не используйте один и тот же рабочий процесс rphost для одновременного обслуживания MSSQL и PostgreSQL.
  2. Используйте создание отдельных служб Windows для разных типов баз или разных типов конфигураций.
  3. Тщательно следите за объемом оперативной памяти, так как разделение процессов увеличивает требования к «железу».
  4. Отключайте неиспользуемые компоненты платформы (Акселератор, полнотекстовый поиск в тех базах, где он не нужен), чтобы высвободить ресурсы для стабильной работы основных драйверов СУБД.
← На главную