Свертка большой информационной базы (в нашем случае объемом около 70 Гб и выше) — это всегда серьезное испытание для серверных ресурсов и стабильности платформы 1С. Одной из самых распространенных и неприятных проблем является аварийное завершение рабочего процесса rphost на этапе пометки объектов на удаление. В данной статье мы подробно разберем, почему возникает эта ошибка, как правильно настроить кластер серверов 1С и SQL-сервер, чтобы процесс прошел успешно, и ответим на вопрос о возможности возобновления прерванной свертки.
Когда мы запускаем длительную операцию, такую как свертка, фоновое задание может выполняться десятки часов. Ошибка "Аварийно завершился рабочий процесс фонового задания" обычно сигнализирует о том, что менеджер кластера 1С принудительно завершил процесс rphost. Проанализируем основные причины такого поведения системы:
rphost.Первым делом нам необходимо подготовить сервер 1С к длительной работе без прерываний. Рассмотрим, какие настройки в консоли администрирования 1С:Предприятия помогут нам избежать падения процесса.
Перейдем в свойства нашего кластера (обычно это Локальный кластер) и проанализируем следующие параметры:
0. Это отключит автоматический перезапуск рабочих процессов раз в сутки. Именно этот параметр часто является виновником того, что свертка "вылетает" через 24 часа.0 (без ограничений), если ресурсы сервера позволяют. Это предотвратит остановку процесса из-за "утечек" памяти, которые часто сопровождают массовую обработку объектов.Свертка генерирует колоссальное количество транзакций. Проанализируем состояние базы данных на уровне SQL. Чтобы избежать аварийной остановки из-за дисковой подсистемы или блокировок, выполним следующие действия:
Перевод базы в модель восстановления Simple. Если ваша база работает в модели Full, файл лога транзакций (LDF) будет расти до тех пор, пока не займет всё свободное место на диске. Рассмотрим пример команды для перевода базы в простой режим:
USE [master];
ALTER DATABASE [Имя_Вашей_Базы] SET RECOVERY SIMPLE;
GO
После завершения свертки и удаления данных не забудьте вернуть модель Full и сделать полную резервную копию.
Прежде чем запускать стандартную обработку СверткаИнформационнойБазы, мы должны минимизировать объем обрабатываемых данных. Рассмотрим, что замедляет пометку на удаление:
_DataHistory могут быть огромными. Очистите историю данных за прошлые периоды перед началом свертки.Рассмотрим важный вопрос: можно ли продолжать свертку после ошибки на этапе пометки на удаление?
Ответ: Да, можно. Стандартный механизм свертки в 1С:Бухгалтерия 3.0 спроектирован таким образом, что при повторном запуске он проверяет текущее состояние объектов. Если часть документов уже была помечена на удаление до сбоя, система просто пропустит их. Однако помните, что проверка каждого объекта всё равно занимает время, поэтому лучше устранить причину падения rphost, чем запускать процесс заново многократно.
Также проанализируем стратегию выбора периода. Для базы объемом 70 Гб не рекомендуется сворачивать сразу 3-4 года. Оптимальный алгоритм действий выглядит так:
Shrink (сжатие) базы данных и лога в SQL Server Management Studio.Если штатная обработка работает слишком медленно или продолжает падать, программисты часто прибегают к использованию свойства ОбменДанными.Загрузка = Истина. Это позволяет обойти тяжелые проверки в подписках на события при записи объекта.
Рассмотрим пример кода, который можно использовать во внешней обработке для быстрой пометки документов определенного типа:
Выборка = Документы.РеализацияТоваровУслуг.Выбрать(ДатаНачала, ДатаКонца);
Пока Выборка.Следующий() Цикл
ОбъектДок = Выборка.ПолучитьОбъект();
ОбъектДок.ОбменДанными.Загрузка = Истина;
ОбъектДок.УстановитьПометкуУдаления(Истина);
Попытка
ОбъектДок.Записать();
Исключение
ЗаписьЖурналаРегистрации("ОшибкаСвертки", УровеньЖурналаРегистрации.Ошибка, , , ИнформацияОбОшибке());
КонецПопытки;
КонецЦикла;
Использование такого подхода значительно снижает нагрузку на рабочий процесс 1С, так как платформа не выполняет дополнительные расчеты и проверки, связанные с бизнес-логикой документа.
Упомянутая в обсуждении ошибка POST /e1cib/logForm является следствием падения рабочего процесса. Когда rphost аварийно завершается, клиентское приложение пытается отправить данные в журнал регистрации или получить ответ от сервера, но не находит активного процесса. Если вы видите эту ошибку одновременно в нескольких базах на одном сервере, это подтверждает теорию о том, что "упал" весь рабочий процесс кластера, а не произошел сбой в коде конкретной свертки.
Для успешной свертки большой базы 1С:Бухгалтерия нам необходимо обеспечить стабильность серверной среды. Основные рекомендации:
Соблюдение этих правил позволит вам избежать аварийных завершений и успешно уменьшить объем информационной базы.