Можно ли установить PostgreSQL на рабочий сервер совместно с MS SQL Server и как правильно выполнить переход?

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

В процессе развития ИТ-инфраструктуры предприятия администраторы часто сталкиваются с аппаратными и лицензионными ограничениями бесплатных версий проприетарного программного обеспечения. Типичный пример — использование СУБД MS SQL Server Express совместно с платформой 1С:Предприятие. Когда объем баз растет, а производительность падает, встает вопрос о переходе на альтернативные бесплатные решения, такие как PostgreSQL. Рассмотрим подробно, можно ли совмещать эти СУБД на одном сервере, с какими скрытыми проблемами можно столкнуться и как правильно настроить систему для максимальной производительности.

Совместное существование MS SQL и PostgreSQL на одном сервере

Начнем с главного вопроса: можно ли установить PostgreSQL на сервер, где уже запущен и активно работает MS SQL Server?

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

  1. MS SQL Server по умолчанию прослушивает TCP-порт 1433.
  2. PostgreSQL по умолчанию использует TCP-порт 5432.

Благодаря этому сетевые запросы к базам данных не будут пересекаться. Вы можете запустить обе службы одновременно, настроить PostgreSQL, развернуть на нем тестовые базы, проверить их работоспособность и лишь затем деактивировать или полностью удалить MS SQL Server. Однако бесконфликтность на уровне сетевых портов не означает отсутствие борьбы за ресурсы сервера (оперативную память, процессорное время и дисковую активность). Рассмотрим сопутствующие факторы, которые требуют обязательного анализа.

Критические проблемы текущей инфраструктуры (анализ ситуации автора)

Проанализируем конфигурацию сервера, описанную в теме: 20 активных пользователей, базы общей сложностью более 7 ГБ (Бухгалтерия предприятия 3.0, Управление торговлей 11.4, Зарплата и управление персоналом), операционная система Windows 10, 24 ГБ оперативной памяти и бесплатный MS SQL Express. В этой схеме скрыто сразу несколько критических архитектурных ошибок:

  1. Использование десктопной ОС Windows 10 в качестве сервера. Это одна из ключевых причин нестабильности. В Windows 10 действует жесткое ограничение на количество одновременных входящих сетевых подключений (не более 20 сессий). При работе 20 реальных пользователей сервер 1С, веб-сервисы и фоновые задания мгновенно исчерпывают этот лимит. Операционная система начинает принудительно разрывать «лишние» соединения, что приводит к вылетам платформы 1С. Кроме того, планировщик задач Windows 10 оптимизирован под запуск интерактивных приложений, а не фоновых служб (СУБД), что существенно снижает общую производительность баз данных.
  2. Лимиты MS SQL Server Express. Многие администраторы полагают, что если в настройках СУБД разрешить использование 12 ГБ памяти, бесплатный SQL Server заберет ее. Это заблуждение. Версия Express имеет жесткое встроенное ограничение на объем оперативной памяти, выделяемой под буферный пул (Buffer Pool — кэш данных в памяти). Для версий MS SQL Express 2016–2022 этот лимит составляет всего 1410 МБ. То, что процесс sqlservr.exe в диспетчере задач потребляет около 4 ГБ, объясняется затратами на системные нужды (сессии пользователей, CLR, внутренние структуры), но саму базу данных в оперативной памяти он кэшировать свыше установленного лимита не может.
  3. Критический порог размера базы данных. База автора уже достигла размера 7 ГБ. Лимит размера файла данных (mdf) в версии MS SQL Express составляет 10 ГБ. Как только размер базы превысит эту отметку, СУБД перейдет в режим «только для чтения» и полностью заблокирует работу организации. Переход на PostgreSQL в данном случае является единственным бесплатным способом спасти систему от неминуемой остановки.
  4. Опасность создания нескольких экземпляров (инстансов) MS SQL Express. Пытаясь обойти ограничение по памяти, администраторы иногда создают отдельную службу SQL под каждую базу 1С. Это позволяет выделить под каждый экземпляр по 1.4 ГБ кэша, но порождает колоссальную конкуренцию за дисковую подсистему и процессор, а также приводит к нехватке памяти у самого сервера 1С, что и вызывает падение процессов конфигуратора и вылеты пользователей.
  5. Вылеты 1С с ошибкой «Нехватка памяти». Данная проблема часто указывает на использование устаревшего 32-разрядного (x86) сервера 1С:Предприятия или запуск 32-разрядного клиента. Рабочий процесс rphost (x86) физически не способен адресовать более 4 ГБ виртуальной памяти (на практике падает при достижении 3–3.5 ГБ). Для решения проблемы обязателен переход на 64-разрядную версию сервера 1С.

Особенности развертывания PostgreSQL для 1С

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

Тонкая настройка конфигурационного файла postgresql.conf

Стандартные настройки PostgreSQL по умолчанию ориентированы на запуск СУБД на слабых компьютерах с минимальным объемом ресурсов. Если оставить конфигурацию по умолчанию, производительность 1С будет крайне низкой. Разберем основные параметры файла postgresql.conf, которые необходимо адаптировать под имеющиеся у автора 24 ГБ оперативной памяти (с учетом совместной работы ОС, сервера 1С и СУБД на одной физической машине):

Для редактирования конфигурационного файла найдем параметры и зададим следующие значения:


# Пример базовой настройки postgresql.conf для сервера с 24 ГБ ОЗУ,
# где также запущен сервер приложений 1С

listen_addresses = '*'
port = 5432

# Выделим под кэш СУБД около 25% от доступной памяти (порядка 5-6 ГБ)
shared_buffers = 6GB

# Объем памяти для сортировки и сложных запросов на одно подключение
work_mem = 64MB

# Объем памяти для сервисных операций (индексация, очистка VACUUM)
maintenance_work_mem = 1536MB

# Оценка операционной системе доступного дискового кэша (около 50-60% от ОЗУ)
effective_cache_size = 14GB

# Максимальное количество одновременных подключений
max_connections = 500

# Настройки планировщика для оптимизации запросов 1С
random_page_cost = 1.1
effective_io_concurrency = 200 # только если базы находятся на SSD

Разберем назначение этих настроек подробнее:

Оптимизация дисковой подсистемы: перенос TempDB и pg_wal

Скорость дисковой подсистемы напрямую определяет общую отзывчивость баз 1С. Перенос баз данных на быстрый твердотельный накопитель (SSD) является обязательным условием комфортной работы.

В MS SQL Server критически важную роль играет база временных таблиц tempdb. В PostgreSQL аналогом выступают временные таблицы, создаваемые непосредственно в рабочих базах, а ключевой точкой дисковой нагрузки становится каталог журналов транзакций (предварительной записи) — pg_wal (Write-Ahead Logging).

Для достижения максимального быстродействия СУБД PostgreSQL рекомендуется разделять дисковые потоки чтения и записи по шагам:

  1. Установите операционную систему на быстрый системный SSD (Диск C).
  2. Сами базы данных (каталог данных PostgreSQL) разместите на втором высокопроизводительном SSD (Диск D).
  3. Каталог журналов транзакций pg_wal вынесите на отдельный физический накопитель или создайте для него символическую ссылку (Symlink) на выделенный скоростной диск. Это позволит разгрузить основной накопитель с базой данных от постоянных синхронных операций записи транзакций.

Организация резервного копирования в PostgreSQL

Важнейшее предупреждение участников форума: «Резервное копирование и восстановление на PG обязательно отработайте в сторонке. Это вам не MS SQL». Действительно, в MS SQL Express резервные копии настраиваются через планировщик Windows простым скриптом резервного копирования баз. В PostgreSQL подход к бэкапам отличается.

Категорически не рекомендуется использовать штатную выгрузку баз в формат .dt средствами конфигуратора 1С для ежедневного автоматического бэкапа рабочей базы. Этот процесс полностью блокирует работу пользователей, монополизирует ресурсы процессора и часто завершается аварийными ошибками на базах объемом более 5–10 ГБ.

Для резервного копирования баз на PostgreSQL мы можем использовать два основных инструмента:

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

@echo off
SET PG_ENV_VAR_CHECK=TRUE
SET PGPASSWORD=ВашПарольПользователяPostgres
"C:\Program Files\PostgresPro\15\bin\pg_dump.exe" -h localhost -p 5432 -U postgres -F c -b -v -f "D:\Backup\UT_backup.backup" ИмяБазыДанных1С
  1. Физическое резервное копирование с использованием pg_probackup. Это профессиональная утилита от Postgres Professional, предназначенная для инкрементного резервного копирования. Она позволяет делать резервные копии «на лету», сохраняя только измененные страницы данных с момента последнего бэкапа. Это экономит дисковое пространство и колоссально сокращает время создания копии больших баз.

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

Пошаговый план перехода с MS SQL Express на PostgreSQL

Резюмируя все вышесказанное, составим четкий алгоритм действий по переходу на новую СУБД:

  1. Аппаратный аудит. Убедитесь, что сервер имеет как минимум один производительный SSD-накопитель под базы данных. Перейдите на 64-разрядный сервер 1С:Предприятие, чтобы избежать падений по нехватке памяти. По возможности замените операционную систему Windows 10 на серверную версию Windows Server (или перенесите СУБД на Linux).
  2. Установка СУБД. Скачайте и установите специализированную сборку PostgreSQL (например, Postgres Pro Standard). Порт при установке оставьте по умолчанию (5432).
  3. Тюнинг конфигурации. Откройте конфигурационный файл postgresql.conf, внесите изменения в параметры памяти (shared_buffers, work_mem, effective_cache_size) и перезапустите службу PostgreSQL.
  4. Создание пустых баз. Откройте утилиту администрирования (pgAdmin или через консоль серверов 1С) и создайте новые пустые базы данных на СУБД PostgreSQL.
  5. Выгрузка данных. Зайдите в каждую рабочую конфигурацию на MS SQL в режиме Конфигуратора и выполните выгрузку информационной базы в файл (Администрирование -> Выгрузить информационную базу...). Получите файлы с расширением .dt.
  6. Загрузка данных. Запустите конфигураторы новых пустых баз, развернутых на PostgreSQL, и выполните загрузку ранее созданных файлов .dt (Администрирование -> Загрузить информационную базу...).
  7. Проверка и переключение. Проверьте корректность формирования тяжелых отчетов в базах на PostgreSQL. Если все работает стабильно и быстро, остановите службу MS SQL Server и переведите всех пользователей на работу в новые базы. Настройте расписание автоматического резервного копирования с помощью pg_dump.
← На главную