При работе с крупными или даже средними информационными базами 1С:Розница на SQL-сервере администраторы часто сталкиваются с критической ошибкой при попытке создания начального образа подчиненного узла РИБ (распределенной информационной базы). Ошибка «Превышен максимальный расход памяти за один вызов» может возникнуть даже в том случае, если база кажется небольшой, а настройки сервера 1С выглядят корректными. В данной статье мы подробно проанализируем причины возникновения этой ситуации и разберем несколько проверенных способов решения проблемы, включая обходные пути, которые гарантированно работают.
Прежде всего, выясним причину. При выполнении команды Создать начальный образ сервер 1С начинает процесс сериализации данных. Он считывает объекты из базы данных, преобразует их в XML-формат и упаковывает в файл образа. На SQL-варианте этот процесс происходит в оперативной памяти рабочих процессов сервера (rphost). Если объем данных, передаваемых в рамках одного вызова, превышает установленные лимиты или доступную физическую память, менеджер кластера принудительно завершает операцию.
Рассмотрим подробнее три основных способа преодоления этой проблемы: настройку параметров сервера, использование промежуточной файловой базы и метод «ручного клонирования».
Многие пытаются решить проблему, установив параметр «Безопасный расход памяти за один вызов» в значение -1. Однако этого не всегда достаточно. Проанализируем дополнительные настройки в консоли администрирования кластера:
-1) часто требуют перезапуска службы 1C:Enterprise 8.3 Server Agent, так как для уже запущенных процессов старые лимиты могут продолжать действовать.Также стоит проверить дисковое пространство. Процесс создания образа активно использует временную директорию пользователя, под которым работает служба сервера 1С. Убедимся, что на диске с папкой Temp свободно места как минимум в 2 раза больше размера всей базы данных.
Это один из самых эффективных способов, упомянутых в обсуждении. Суть заключается в том, что в файловом варианте 1С не накладывает таких жестких ограничений на «вызовы», как серверный процесс rphost. Разберем этот алгоритм по шагам:
.dt через меню «Администрирование — Выгрузить информационную базу»..dt файл..1CD) переносим на компьютер в магазине.Важный момент: Многие опасаются, что база, созданная из «файловой копии», не будет синхронизироваться с «SQL-центром». Это не так. В системе 1С идентификация объектов и узлов происходит по уникальным идентификаторам (GUID). При выгрузке в .dt и последующей загрузке все GUID сохраняются. Следовательно, подчиненный узел, созданный из файловой копии центра, будет иметь тот же идентификатор, что и узел в основной SQL-базе. Достаточно будет просто настроить транспорт (например, FTP или общую папку), и обмен заработает корректно.
Если создание образа штатными средствами все равно завершается неудачей, применим метод прямого клонирования. Проанализируем ситуацию: начальный образ — это фактически полная копия центральной базы, в которой программно указано, кто является «главным узлом», и удалены лишние данные. Мы можем сделать это вручную.
Разберем по шагам:
.dt).
// Определим ссылку на узел, который должен стать главным (Центральный офис)
УзелЦентр = ПланыОбмена.ПоМагазинам.НайтиПоКоду("ЦО");
// Установим этот узел в качестве главного для текущей базы
ПланыОбмена.УстановитьГлавныйУзел(УзелЦентр);
После выполнения этого кода база потребует перезапуска. При следующем входе она уже будет работать в режиме подчиненного узла. Внимание: После этого необходимо очистить в этой базе лишние данные (например, документы других магазинов), если в плане обмена настроены фильтры миграции. Также нужно очистить таблицы регистрации изменений, чтобы база не пыталась отправить в центр все свои данные повторно.
Иногда выясним причину сбоя в избыточности данных. Перед тем как нажать кнопку «Создать образ», проанализируем регистрацию изменений:
Регистрация изменений для обмена.Посмотрим на влияние антивирусного ПО. При создании образа 1С создает огромный временный файл. Если антивирус настроен на сканирование «на лету» всех создаваемых файлов, он блокирует доступ к этому файлу для процесса 1С, что вызывает тайм-ауты и ошибки, маскирующиеся под проблемы с памятью. Рекомендуется временно отключить антивирус на сервере на период генерации РИБ.
Подводя итог, отметим, что наиболее стабильным и простым способом для версии 2.2.11.30 является использование промежуточной файловой базы. Это гарантирует сохранение всех идентификаторов и позволяет избежать специфических ограничений SQL-сервера 1С.