Почему запись документов в 1С на PostgreSQL работает значительно медленнее, чем на MS SQL, и как это исправить?

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

При переходе с MS SQL на PostgreSQL в рамках импортозамещения многие сталкиваются с неожиданным падением производительности, особенно на операциях записи и проведения документов. Ситуация, когда мощный сервер с PostgreSQL показывает результаты в десятки раз хуже, чем старый сервер на MS SQL, является типичной и требует комплексного подхода к решению. Простого "переключения" СУБД недостаточно; необходима тщательная настройка как самой базы данных, так и анализ работы платформы 1С.

Разберем по шагам, в какую сторону двигаться, чтобы выявить причину низкой скорости и оптимизировать работу системы.

Шаг 1: Проверка базовых условий и окружения

Прежде чем погружаться в тонкие настройки СУБД, убедимся, что наша основа заложена правильно. Правильное проектирование защищенной инфраструктуры — залог стабильной работы, ведь часто проблемы кроются в самых очевидных вещах.

  1. Использование сборки PostgreSQL от 1С. Фирма "1С" выпускает собственные, доработанные версии PostgreSQL. Эти сборки содержат патчи, оптимизирующие работу СУБД именно под запросы, генерируемые платформой "1С:Предприятие". Крайне рекомендуется использовать сборку от 1С, а не "ванильную" версию PostgreSQL. Кроме того, можно использовать сценарий для автоматизации установки СУБД в среде Linux, чтобы исключить ошибки базовой настройки.
  2. Совместимость версий. Проверьте, соответствует ли ваша версия платформы 1С рекомендуемой для используемой версии PostgreSQL. Эту информацию можно найти на портале ИТС. Например, для PostgreSQL 16 могут требоваться определенные релизы платформы 8.3.22, 8.3.23 и выше. Несоответствие версий может приводить к неоптимальной работе.
  3. Настройки сервера 1С и окружения. Убедитесь, что серверы 1С и СУБД находятся в одной локальной сети с высокой пропускной способностью. Исключите сетевые задержки как возможную причину. Если вы тестируете на разных физических серверах, убедитесь, что проблема не в самом сервере приложений 1С, используя монитор кластеров серверов для выявления задержек на уровне платформы.
  4. Настройки операционной системы и виртуализации. Если PostgreSQL работает на Linux (что предпочтительнее), для SSD-дисков рекомендуется настроить планировщик ввода-вывода на noop или deadline. Проверьте настройки гипервизора: нет ли искусственных ограничений по IOPS (операциям ввода-вывода в секунду) или по использованию процессорных мощностей для виртуальной машины с СУБД.

Шаг 2: Глубокая настройка PostgreSQL (анализ postgresql.conf)

Производительность PostgreSQL на 90% зависит от корректных настроек в файле postgresql.conf. Настройки по умолчанию рассчитаны на слабые машины и абсолютно не подходят для мощных серверов. Проанализируем ключевые параметры.

Важно: перед внесением изменений всегда делайте резервную копию файла postgresql.conf, а также настройте регулярное архивирование баз данных PostgreSQL.

Для первоначальной настройки можно воспользоваться онлайн-калькуляторами типа pgtune, которые сгенерируют базовый конфиг на основе параметров вашего сервера.

Шаг 3: Анализ и оптимизация запросов 1С

Если после настройки сервера производительность все еще низкая, скорее всего, проблема кроется в самих запросах. MS SQL и PostgreSQL — это разные СУБД с разными оптимизаторами. Запрос, который отлично работает на одной, может быть крайне медленным на другой.

  1. Включите логирование запросов. В postgresql.conf установите параметр log_statement = 'all' для временной диагностики. Это позволит увидеть все запросы, которые платформа 1С отправляет в базу данных во время проведения документа.
  2. Используйте EXPLAIN ANALYZE. Это главный инструмент для анализа производительности запросов. Найдя медленный запрос в логах, выполните его в консоли psql, добавив в начало EXPLAIN ANALYZE. Вывод покажет детальный план выполнения: какие таблицы сканируются, какие индексы используются (и используются ли вообще), где тратится больше всего времени. Ищите в плане "узкие места", такие как Seq Scan (полное сканирование) на больших таблицах, где ожидался Index Scan.
  3. Установите расширение pg_stat_statements. Это расширение собирает статистику по всем выполняемым запросам, позволяя найти самые "тяжелые" и часто выполняемые из них.
  4. Обратите внимание на "проблемные" конструкции. Платформа 1С иногда генерирует код, который исторически был лучше оптимизирован под MS SQL. Для PostgreSQL могут быть неэффективными:
    • Запросы к виртуальным таблицам (например, срезы данных регистров).
    • Сложные соединения с вложенными запросами (JOIN (SELECT ...)).
    • Избыточные группировки.
  5. Проанализируйте блокировки. PostgreSQL использует иные механизмы блокировок, чем MS SQL. При параллельном проведении документов (как в вашем тесте) могут возникать конфликты блокировок, приводящие к долгим ожиданиям. Это может потребовать изменения логики в коде 1С, чтобы минимизировать время удержания транзакционных блокировок.

Шаг 4: Понимание специфики теста и конфигурации (ЗУП 3.1)

Важно понимать, что тест "перезапись документов Больничный лист" — это не простая операция. Конфигурация "Зарплата и управление персоналом" известна сложными алгоритмами расчетов.

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

Многократное падение производительности может быть вызвано всего одним неэффективным планом для одного из этих 24 запросов. Именно поэтому так важен анализ запросов с помощью EXPLAIN ANALYZE.

Использование флага ОбменДанными.Загрузка = Истина упрощает тест, отключая часть бизнес-логики, но не меняет основной схемы взаимодействия с базой данных при записи движений. Проблема неэффективности запросов при этом сохраняется.

Итог

Переход 1С с MS SQL на PostgreSQL — это не просто смена СУБД, а полноценный проект по миграции, требующий внимания к деталям. Начните с проверки базовых условий (сборка от 1С, совместимость версий). Затем переходите к тщательной настройке postgresql.conf под ваше "железо". Если проблема сохраняется, погружайтесь в анализ медленных запросов с помощью инструментов PostgreSQL. Скорее всего, корень проблемы кроется в комбинации недостаточной настройки СУБД и неоптимальных планов выполнения для сложных запросов, генерируемых платформой 1С.

← На главную