Синхронизация данных между 1С:ERP Управление предприятием и 1С:Бухгалтерия предприятия 3.0 через формат EnterpriseData — стандартная задача. Однако при выгрузке данных за длительный период (например, за месяц с объемом от нескольких сотен до тысячи документов) многие специалисты сталкиваются с критической ошибкой: обмен зависает на часы, потребление оперативной памяти резко возрастает, после чего фоновое задание аварийно завершается. Разберем детально, почему это происходит и как стабилизировать процесс загрузки.
Проанализируем техническую сторону процесса загрузки пакета обмена в конфигурацию 1С:Бухгалтерия предприятия. В момент обработки входящего XML-файла платформа выполняет десериализацию данных, поиск соответствий ссылочных типов, запись объектов и их проведение. К падению службы приводят следующие ключевые факторы:
rphost.rmngr отслеживает показатели расхода оперативной памяти. Если рабочий процесс превышает заданные пороги («Безопасный расход памяти за один вызов» или «Максимальный объем памяти рабочих процессов»), кластер серверов принудительно перезапускает процесс rphost, что регистрируется как аварийное завершение фонового задания.rphost пытается выделить блок памяти для тяжелой транзакции, операционная система уходит в своп на диск, порождая графики «парабол» расхода памяти и аварийные сбои по таймауту.Выясним самый действенный способ разгрузить рабочий процесс: необходимо исключить проведение документов в момент их создания из файла обмена. Рассмотрим, как это реализовать на практике.
В настройках синхронизации данных со стороны приемника (БП 3.0) в правилах загрузки данных следует отключить автоматическое проведение входящих документов. Документы должны попадать в информационную базу только в статусе «Записан», без формирования движений по регистрам.
После того как «чистая» загрузка пройдет без сбоев за считанные минуты, проведение документов выполняем отдельным этапом:
Если на сервере установлено 128 ГБ оперативной памяти, а СУБД и сервер 1С делят одну машину, выполним тонкую настройку лимитов памяти.
Во-первых, ограничим аппетит СУБД. В среде MS SQL Server в свойствах сервера на вкладке Memory (Память) параметр Max Server Memory по умолчанию равен неограниченному значению. Зададим фиксированный лимит: для сервера со 128 ГБ ОЗУ выделим SQL Server около 70–80 ГБ. Оставшиеся 45–55 ГБ резервируем под операционную систему, служебные процессы и процессы rphost.
Во-вторых, проверим параметры в консоли администрирования кластера серверов 1С:
0 (ограничение снято) либо выставим порог, достаточный для работы регламентных заданий.rphost, чтобы тяжелый обмен не влиял на работу интерактивных пользователей.Рассмотрим регламент выгрузки данных. Попытка выгружать документы один раз в месяц пачкой из 1000 и более документов с привязанными счет-фактурами неизбежно порождает пиковые нагрузки. Посмотрим, как минимизировать риски:
Количество объектов в транзакции (например, установим значение от 10 до 25 вместо 100). В этом случае фиксация изменений в СУБД будет происходить чаще, память будет своевременно освобождаться, а блокировки таблиц станут кратковременными.tempdb в SQL Server задан фиксированный шаг автороста (например, 256–512 МБ), а не процентный рост. При десериализации больших пакетов EnterpriseData временные таблицы СУБД активно используют tempdb, и частые микрорасширения файла могут вызывать тайм-ауты транзакций.Применяя связку из ограничения памяти для SQL Server, отключения проведения документов при непосредственной загрузке и дробления транзакций, мы получаем гарантированно стабильный и предсказуемый обмен между ERP и бухгалтерией даже на объемных пакетах данных.