При выполнении регламентных заданий по синхронизации данных между крупными конфигурациями, такими как 1С:ERP Управление предприятием 2.5 и 1С:Бухгалтерия предприятия 3.0, нередко возникает критическая ошибка: «На сервере недостаточно памяти для выполнения задания». Эта проблема особенно актуальна при попытке выгрузить значительный объем документов за длительный период (например, месяц), даже если на физическом сервере установлено 48 Гб оперативной памяти или более. Разберем детально причины этого поведения и способы его устранения.
Прежде всего, проанализируем ситуацию. Ошибка «Недостаточно памяти» не всегда означает физическое отсутствие свободной ОЗУ. В контексте работы сервера 1С:Предприятие 64-бит это может сигнализировать о следующих проблемах:
Рассмотрим самый простой и эффективный способ снижения нагрузки — уменьшение объема данных, обрабатываемых за один такт. Вместо того чтобы выгружать данные за целый месяц, разделим задачу на части. Как показывает практика, если выгрузка за месяц падает, то выгрузка за 5–7 дней проходит успешно.
Для автоматизации этого процесса можно воспользоваться следующими методами:
ПодключитьОбработчикОжидания. Это гарантированно очистит память rphost.Проанализируем параметры рабочего сервера в консоли администрирования кластера. Часто стандартные настройки мешают выполнению тяжелых задач. Выполним следующие действия:
rphost не занижен. Для сервера с 48 Гб ОЗУ допустимо выделять под процессы 1С до 35-40 Гб, оставляя остальное ОС и СУБД (если она на том же сервере).rphost, что распределит нагрузку и снизит риски фрагментации памяти внутри одного процесса.Выясним причину длительной работы обмена. Исследования показывают, что в конфигурациях на базе ERP 2.5 (и аналогичных версиях УТ 11) механизм обмена через универсальный формат может вызывать функцию РаспределениеРасходовНаСебестоимостьТоваров в общем модуле ДоходыИРасходыСервер. Посмотрим на фрагмент проблемного кода, который может быть вызван при обмене:
// Пример неоптимального запроса в типовом механизме
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УчетСебестоимости.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| УчетСебестоимости.Регистратор КАК ДокументПоступления,
| УчетСебестоимости.КоличествоПриход КАК Количество
|ПОМЕСТИТЬ ВтПоступленияТоваров
|ИЗ
| РегистрНакопления.СебестоимостьТоваров.Обороты(,, Регистратор, Организация = &Организация) КАК УчетСебестоимости";
Проанализируем ситуацию: здесь выбираются обороты по всей таблице регистра себестоимости по конкретной организации без ограничения периода. Если база ведется несколько лет, объем данных в tempdb и оперативной памяти будет колоссальным.
Что нужно сделать: Если вы столкнулись с тем, что обмен 7500 объектов идет 8 часов, необходимо с помощью замера производительности найти подобные участки и добавить в параметры виртуальных таблиц отборы по периоду (ДатаНачала и ДатаОкончания), соответствующим периоду выгрузки. Для анализа и пошаговой проверки работы модулей можно использовать расширение для отладки обмена через универсальный формат.
Рассмотрим дополнительные факторы, которые могут влиять на потребление памяти:
C:\Windows\Temp) и добавьте ее в исключения антивируса. При обмене 1С создает огромные временные файлы сериализации, и их блокировка антивирусом может вызвать резкий скачок потребления ОЗУ процессом rphost.Для стабильного выполнения синхронизации ERP 2.5 и БП 3.0 на платформе 8.3.20 придерживайтесь следующего алгоритма: