Какую версию PostgreSQL выбрать для 1С:Предприятие 8.3.14 и как решить проблему блокировок в УТ 10.3?

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

При обновлении платформы 1С:Предприятие администраторы часто сталкиваются со скрытыми проблемами совместимости старых конфигураций с современными СУБД. Типичный сценарий: перевод связки старой конфигурации 1С:Управление торговлей 10.3 (работающей на обычных формах) и платформы 1С 8.3.14 на СУБД PostgreSQL. Сразу после обновления пользователи начинают жаловаться на постоянные конфликты, таймауты и взаимные блокировки данных (дедлоки). Давайте подробно разберем, почему возникает эта проблема, какую версию PostgreSQL необходимо установить для платформы 8.3.14 и как правильно выполнить переход, чтобы база работала стабильно и быстро.

Выясняем причину конфликтов блокировок в УТ 10.3 на PostgreSQL

Для начала проанализируем ситуацию: почему на старой платформе 8.3.9 все работало относительно стабильно, а после перехода на 8.3.14 СУБД PostgreSQL начала блокировать работу пользователей? Главная причина кроется в архитектуре конфигурации 1С:Управление торговлей 10.3 и механизме работы блокировок в базах данных.

По умолчанию в УТ 10.3 используется автоматический режим блокировок данных. В этом режиме платформа 1С полностью перекладывает управление транзакциями и блокировками на плечи СУБД. Исторически УТ 10.3 проектировалась под MS SQL Server, который эффективно справляется с автоматическими блокировками за счет развитого механизма эскалации и блокировок на уровне строк. Однако СУБД PostgreSQL построена на архитектуре MVCC (многоверсионность). При работе в автоматическом режиме блокировок платформа 1С вынуждена накладывать на таблицы PostgreSQL жесткие физические блокировки уровня всей таблицы (например, AccessExclusiveLock), чтобы гарантировать изоляцию транзакций и предотвратить чтение грязных данных.

Особенно критично это проявляется при расчете партионного учета (списание партий по ФИФО/ЛИФО при проведении документов). Процесс проведения любого документа, влияющего на партии (например, «Реализация товаров и услуг»), полностью блокирует регистр накопления ПартииТоваровНаСкладах. Пока один пользователь проводит документ, все остальные процессы, пытающиеся сделать запись в этот же регистр, выстраиваются в очередь. Как только время ожидания превышает критический порог, пользователи получают ошибку таймаута блокировки (lock timeout) или взаимной блокировки (дедлока).

Решение проблемы: перевод конфигурации на управляемый режим блокировок

Единственным стратегически верным решением для обеспечения стабильной многопользовательской работы УТ 10.3 на СУБД PostgreSQL является частичный или полный перевод конфигурации на управляемый режим блокировок. В этом режиме платформа 1С сама управляет логическими блокировками на уровне сервера приложений 1С с помощью объекта БлокировкаДанных, не нагружая физическую СУБД тяжелыми табличными блокировками.

Разберем по шагам, как перевести конфигурацию на управляемый режим блокировок:

  1. Откроем базу УТ 10.3 в режиме Конфигуратор.
  2. Откроем свойства корневого объекта конфигурации.
  3. Найдем свойство РежимУправленияБлокировкамиДанных и установим значение Управляемый (или АвтоматическийИУправляемый для постепенного перехода).
  4. Для ключевых регистров накопления, вызывающих наибольшее число конфликтов (например, ПартииТоваровНаСкладах, ТоварыНаСкладах, ВзаиморасчетыСКонтрагентами), установим свойство РежимУправленияБлокировкамиДанных в значение Управляемый.
  5. В модулях проведения документов перед началом транзакции добавим программную установку управляемой блокировки.

Рассмотрим пример программного кода для установки управляемой блокировки на регистр накопления при проведении документа:


Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ПартииТоваровНаСкладах");
ЭлементБлокировки.УстановитьЗначение("Организация", Ссылка.Организация);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();

Этот код гарантирует, что платформа заблокирует только данные по конкретной организации на логическом уровне сервера приложений 1С. Физическая таблица в PostgreSQL при этом останется свободной для записи по другим организациям или складам, что полностью решит проблему массовых конфликтов блокировок.

Какую версию PostgreSQL ставить для платформы 1С 8.3.14?

Теперь определимся с выбором версии СУБД. Платформа 1С:Предприятие 8.3.14 предъявляет определенные системные требования к версиям PostgreSQL. Установка устаревшей СУБД (например, 9.1 или 9.6) или, наоборот, слишком новой (например, PostgreSQL 14-17) на старую платформу приведет к фатальным ошибкам несовместимости.

Рассмотрим наиболее подходящие и проверенные релизы для платформы 8.3.14:

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

Особенности лицензирования Postgres Pro для 1С

Многие администраторы опасаются использовать сборки от компании Postgres Professional, считая, что они стали полностью платными. Выясним реальное положение дел:

Пошаговая инструкция по обновлению СУБД PostgreSQL

Рассмотрим правильный алгоритм обновления СУБД PostgreSQL с устаревшей версии (например, 9.1) на версию 10.8-3.1C в операционной системе Windows Server:

  1. Создание резервных копий. Это самый важный шаг. Выгрузите все базы данных 1С в файлы формата .dt через Конфигуратор. Дополнительно сделайте логический бэкап всех баз средствами PostgreSQL с помощью утилиты pg_dump.
  2. Остановка служб. Завершите работу всех активных сеансов пользователей, остановите службу сервера 1С:Предприятие и службу СУБД PostgreSQL.
  3. Удаление старой версии. Удалите старую версию PostgreSQL через панель управления Windows. Удаление программы не затронет ваши файлы данных (каталог data), однако для чистоты установки рекомендуется переименовать или переместить старый каталог данных в архив.
  4. Установка новой СУБД. Запустите установку дистрибутива PostgreSQL 10.8-3.1C. В процессе установки укажите корректную локаль (для России — Russian, Russia) и кодировку UTF-8. Это критически важно для корректной работы индексов в 1С.
  5. Настройка конфигурационного файла. Откройте файл postgresql.conf в каталоге данных новой СУБД и оптимизируйте ключевые параметры под ресурсы вашего сервера.

Посмотрим на пример базовой настройки файла postgresql.conf для сервера с 16 ГБ оперативной памяти:


shared_buffers = 4GB # 25% от общего объема ОЗУ сервера
effective_cache_size = 12GB # 50-75% от ОЗУ
work_mem = 64MB # память для сложных запросов и сортировок
maintenance_work_mem = 512MB # память для обслуживания индексов
lock_timeout = 20000 # таймаут ожидания блокировки в миллисекундах
deadlock_timeout = 1000 # время обнаружения дедлоков
max_connections = 150 # максимальное число подключений к СУБД

После внесения изменений запустите службу PostgreSQL. Зайдите в утилиту администрирования (например, pgAdmin) и создайте пустую базу данных под управлением новой СУБД.

Реиндексация и восстановление баз данных

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

  1. Запустите утилиту администрирования серверов 1С и создайте новое описание информационной базы, указав параметры подключения к свежесозданной пустой базе в PostgreSQL 10.8.
  2. Запустите Конфигуратор для этой пустой базы данных.
  3. Выполните команду Администрирование — Восстановить информационную базу и выберите ранее сохраненный файл .dt.
  4. После успешной загрузки данных откройте конфигурацию в режиме Тестирование и исправление и запустите процедуру Реиндексация таблиц информационной базы. Это полностью перестроит все индексы под стандарты новой версии PostgreSQL, исключив возможные зависания тяжелых отчетов.

Следуя этой инструкции, вы успешно обновите СУБД до актуального релиза PostgreSQL 10.8, а перевод ключевых регистров УТ 10.3 на управляемые блокировки навсегда избавит пользователей от зависаний системы при проведении документов.

← На главную