При обновлении платформы 1С:Предприятие администраторы часто сталкиваются со скрытыми проблемами совместимости старых конфигураций с современными СУБД. Типичный сценарий: перевод связки старой конфигурации 1С:Управление торговлей 10.3 (работающей на обычных формах) и платформы 1С 8.3.14 на СУБД PostgreSQL. Сразу после обновления пользователи начинают жаловаться на постоянные конфликты, таймауты и взаимные блокировки данных (дедлоки). Давайте подробно разберем, почему возникает эта проблема, какую версию PostgreSQL необходимо установить для платформы 8.3.14 и как правильно выполнить переход, чтобы база работала стабильно и быстро.
Для начала проанализируем ситуацию: почему на старой платформе 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С. Физическая таблица в PostgreSQL при этом останется свободной для записи по другим организациям или складам, что полностью решит проблему массовых конфликтов блокировок.
Теперь определимся с выбором версии СУБД. Платформа 1С:Предприятие 8.3.14 предъявляет определенные системные требования к версиям PostgreSQL. Установка устаревшей СУБД (например, 9.1 или 9.6) или, наоборот, слишком новой (например, PostgreSQL 14-17) на старую платформу приведет к фатальным ошибкам несовместимости.
Рассмотрим наиболее подходящие и проверенные релизы для платформы 8.3.14:
Важное предупреждение: настоятельно не рекомендуется использовать оригинальную («ванильную») версию PostgreSQL с официального сайта сообщества СУБД. Оригинальный PostgreSQL не умеет корректно работать со специфическими запросами платформы 1С:Предприятие (включая работу с пустыми значениями UUID, логическими типами и правильным упорядочиванием кириллицы с учетом регистронезависимости в индексах). Необходимо устанавливать только специализированные сборки с патчами под 1С.
Многие администраторы опасаются использовать сборки от компании Postgres Professional, считая, что они стали полностью платными. Выясним реальное положение дел:
pg_probackup) и оптимизация под сверхвысокие нагрузки.Рассмотрим правильный алгоритм обновления СУБД PostgreSQL с устаревшей версии (например, 9.1) на версию 10.8-3.1C в операционной системе Windows Server:
.dt через Конфигуратор. Дополнительно сделайте логический бэкап всех баз средствами PostgreSQL с помощью утилиты pg_dump.data), однако для чистоты установки рекомендуется переименовать или переместить старый каталог данных в архив.Russian, Russia) и кодировку UTF-8. Это критически важно для корректной работы индексов в 1С.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. Сделайте следующее:
.dt.Следуя этой инструкции, вы успешно обновите СУБД до актуального релиза PostgreSQL 10.8, а перевод ключевых регистров УТ 10.3 на управляемые блокировки навсегда избавит пользователей от зависаний системы при проведении документов.