Как исправить аварийное завершение рабочего процесса при свертке базы 1С:Бухгалтерия 3.0?

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

Свертка большой информационной базы (в нашем случае объемом около 70 Гб и выше) — это всегда серьезное испытание для серверных ресурсов и стабильности платформы 1С. Одной из самых распространенных и неприятных проблем является аварийное завершение рабочего процесса rphost на этапе пометки объектов на удаление. В данной статье мы подробно разберем, почему возникает эта ошибка, как правильно настроить кластер серверов 1С и SQL-сервер, чтобы процесс прошел успешно, и ответим на вопрос о возможности возобновления прерванной свертки.

Анализ причины аварийного завершения rphost

Когда мы запускаем длительную операцию, такую как свертка, фоновое задание может выполняться десятки часов. Ошибка "Аварийно завершился рабочий процесс фонового задания" обычно сигнализирует о том, что менеджер кластера 1С принудительно завершил процесс rphost. Проанализируем основные причины такого поведения системы:

  1. Интервал перезапуска рабочих процессов: По умолчанию в настройках кластера 1С стоит параметр "Интервал перезапуска", равный 86400 секундам (24 часа). Если свертка идет дольше суток, процесс будет принудительно убит и запущен заново, что прервет выполнение задания.
  2. Превышение лимитов памяти: Если в настройках кластера заданы параметры "Безопасный расход памяти за один вызов" или "Предел памяти", то при накоплении кэша во время массовой пометки на удаление процесс может превысить эти пороги.
  3. Взаимовлияние баз: Если на одном рабочем процессе "висят" несколько информационных баз, и в одной из них происходит интенсивный импорт или тяжелый запрос, это может привести к нестабильности всего процесса rphost.
  4. Ресурсы SQL-сервера: Переполнение лога транзакций (LDF) или нехватка оперативной памяти на сервере базы данных также провоцируют сбои в работе серверной части 1С.

Шаг 1. Тонкая настройка кластера серверов 1С

Первым делом нам необходимо подготовить сервер 1С к длительной работе без прерываний. Рассмотрим, какие настройки в консоли администрирования 1С:Предприятия помогут нам избежать падения процесса.

Перейдем в свойства нашего кластера (обычно это Локальный кластер) и проанализируем следующие параметры:

Шаг 2. Оптимизация MS SQL Server перед сверткой

Свертка генерирует колоссальное количество транзакций. Проанализируем состояние базы данных на уровне SQL. Чтобы избежать аварийной остановки из-за дисковой подсистемы или блокировок, выполним следующие действия:

Перевод базы в модель восстановления Simple. Если ваша база работает в модели Full, файл лога транзакций (LDF) будет расти до тех пор, пока не займет всё свободное место на диске. Рассмотрим пример команды для перевода базы в простой режим:


USE [master];
ALTER DATABASE [Имя_Вашей_Базы] SET RECOVERY SIMPLE;
GO

После завершения свертки и удаления данных не забудьте вернуть модель Full и сделать полную резервную копию.

Шаг 3. Подготовка данных внутри 1С

Прежде чем запускать стандартную обработку СверткаИнформационнойБазы, мы должны минимизировать объем обрабатываемых данных. Рассмотрим, что замедляет пометку на удаление:

Шаг 4. Работа с этапом "Пометка на удаление"

Рассмотрим важный вопрос: можно ли продолжать свертку после ошибки на этапе пометки на удаление?

Ответ: Да, можно. Стандартный механизм свертки в 1С:Бухгалтерия 3.0 спроектирован таким образом, что при повторном запуске он проверяет текущее состояние объектов. Если часть документов уже была помечена на удаление до сбоя, система просто пропустит их. Однако помните, что проверка каждого объекта всё равно занимает время, поэтому лучше устранить причину падения rphost, чем запускать процесс заново многократно.

Также проанализируем стратегию выбора периода. Для базы объемом 70 Гб не рекомендуется сворачивать сразу 3-4 года. Оптимальный алгоритм действий выглядит так:

  1. Выполняем свертку за один год.
  2. Запускаем процедуру "Удаление помеченных объектов".
  3. Выполняем Shrink (сжатие) базы данных и лога в SQL Server Management Studio.
  4. Обновляем статистики SQL.
  5. Переходим к следующему году.

Шаг 5. Использование программных методов для ускорения

Если штатная обработка работает слишком медленно или продолжает падать, программисты часто прибегают к использованию свойства ОбменДанными.Загрузка = Истина. Это позволяет обойти тяжелые проверки в подписках на события при записи объекта.

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


Выборка = Документы.РеализацияТоваровУслуг.Выбрать(ДатаНачала, ДатаКонца);
Пока Выборка.Следующий() Цикл
    ОбъектДок = Выборка.ПолучитьОбъект();
    ОбъектДок.ОбменДанными.Загрузка = Истина;
    ОбъектДок.УстановитьПометкуУдаления(Истина);
    Попытка
        ОбъектДок.Записать();
    Исключение
        ЗаписьЖурналаРегистрации("ОшибкаСвертки", УровеньЖурналаРегистрации.Ошибка, , , ИнформацияОбОшибке());
    КонецПопытки;
КонецЦикла;

Использование такого подхода значительно снижает нагрузку на рабочий процесс 1С, так как платформа не выполняет дополнительные расчеты и проверки, связанные с бизнес-логикой документа.

Выясним причину ошибки POST к ресурсу /e1cib/logForm

Упомянутая в обсуждении ошибка POST /e1cib/logForm является следствием падения рабочего процесса. Когда rphost аварийно завершается, клиентское приложение пытается отправить данные в журнал регистрации или получить ответ от сервера, но не находит активного процесса. Если вы видите эту ошибку одновременно в нескольких базах на одном сервере, это подтверждает теорию о том, что "упал" весь рабочий процесс кластера, а не произошел сбой в коде конкретной свертки.

Подведем итоги

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

Соблюдение этих правил позволит вам избежать аварийных завершений и успешно уменьшить объем информационной базы.

← На главную