Что делать, если реструктуризация базы 1С зациклилась или идет аномально долго?

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

При обновлении тяжелых конфигураций, таких как Управление холдингом или ERP, системные администраторы и программисты часто сталкиваются с пугающим поведением платформы: процесс реструктуризации таблиц в Конфигураторе кажется бесконечным. Полоса загрузки доходит до конца, а затем начинается заново, создавая иллюзию «мертвого цикла». В этой статье мы подробно разберем, почему это происходит в современных версиях платформы 1С 8.3.22 и 8.3.23, и как успешно завершить обновление.

Разберем причину «зацикливания» визуального индикатора

Прежде всего, проанализируем поведение системы. Начиная с последних релизов платформы, механизм реструктуризации стал более фрагментарным. То, что пользователь видит в окне Конфигуратора как повторение одного и того же процесса, на самом деле является последовательной обработкой разных типов метаданных. Платформа сначала может реструктурировать справочники, затем документы, после чего переходит к регистрам сведений и накопления. Каждый раз шкала прогресса может сбрасываться в ноль.

Ситуация усугубляется, если в базе активно используются расширения. Платформа может выполнять пересчет структуры основной конфигурации, а следом — всех подключенных расширений по очереди. Рассмотрим пример из практики: на крупных базах процесс может занимать от 4 до 6 часов, даже если кажется, что система «зависла». Основной совет: если нагрузка на процессор (CPU) и дисковую подсистему со стороны SQL-сервера сохраняется, не прерывайте процесс принудительно, так как это может привести к повреждению структуры данных.

Способ 1: Отключение механизма оптимизированной реструктуризации

В платформе 8.3.22 был внедрен механизм «оптимизированной реструктуризации». Несмотря на название, в некоторых случаях (особенно на сложных схемах метаданных) он может работать некорректно или вызывать логические петли. Если вы столкнулись с тем, что база действительно не может завершить обновление, попробуем использовать старый, проверенный алгоритм.

Для этого необходимо запустить обновление конфигурации базы данных через командную строку с использованием специального ключа. Рассмотрим пошагово, как это сделать:

  1. Закройте все сеансы и Конфигуратор.
  2. Запустите командную строку (cmd) от имени администратора.
  3. Выполните команду для обновления конфигурации с флагом отключения оптимизации:

"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" DESIGNER /S "ИмяСервера\ИмяБазы" /N "Логин" /P "Пароль" /ConfigAdministerister /UpdateDBCfg -OptimizedRestructuring Off

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

Способ 2: Настройка СУБД и работа с временными файлами

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

Параметры TempDB и журнала транзакций: При обновлении тяжелой таблицы 1С создает временную копию данных. Если ваша база находится в модели восстановления Full, журнал транзакций (LDF) может мгновенно переполниться. В этом случае SQL-сервер прерывает операцию и начинает откат, а 1С пытается запустить процесс снова. На время обновления рекомендуем переключить базу в модель Simple.

Очистка серверного кэша: Иногда в сеансовых данных зависают старые описания метаданных. Перед началом обновления выполните следующие действия:

Способ 3: Диагностика через Технологический журнал (ТЖ)

Если ожидание более 5 часов не приносит результата, нам необходимо точно понять, на какой таблице «спотыкается» система. Для этого настроим минимальный Технологический журнал. Посмотрим на пример конфигурационного файла logcfg.xml, который поможет выявить проблему:


<config xmlns="http://v8.1c.ru/v8/tech-log">
    <log location="C:\LOGS\DB_UPDATE" history="2">
        <event>
            <eq property="Name" value="DBMSSQL"/>
        </event>
        <event>
            <eq property="Name" value="DBPOSTGRS"/>
        </event>
        <property name="all"/>
    </log>
</config>

В логах ТЖ следует искать события с большой длительностью и повторяющиеся SQL-запросы к одним и тем же таблицам. Если вы видите ошибку Deadlock или WaitConnections, это означает, что процессу реструктуризации мешает фоновое задание или зависшее соединение на уровне СУБД, которое не видно в консоли 1С.

Рекомендации по профилактике

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

  1. Тестирование и исправление: Перед обновлением конфигурации всегда запускайте процедуру ТиС (Тестирование и исправление) с включенными опциями проверки логической и ссылочной целостности. Часто именно битые ссылки мешают корректному созданию индексов при реструктуризации.
  2. Выгрузка в DT: Если база ведет себя странно, попробуйте выгрузить её в .dt и загрузить в новую пустую базу на SQL-сервере. Это принудительно пересоберет все индексы и очистит таблицы от «мусорных» записей.
  3. Контроль свободного места: Убедитесь, что на диске с базой данных и на диске с TempDB свободного места как минимум в 2 раза больше, чем объем самой базы данных.

Подводя итог, отметим: в большинстве случаев «зацикливание» оказывается либо штатной последовательной обработкой данных, либо конфликтом с новым механизмом оптимизации. Использование ключа -OptimizedRestructuring Off и терпение — ваши главные инструменты при работе с платформой 8.3.22 и выше.

← На главную