Процедура «Тестирование и исправление» (ТИИ) является стандартным и необходимым инструментом для поддержания здоровья базы данных 1С. Однако при работе с высоконагруженными или запущенными базами администраторы часто сталкиваются с проблемой: процесс, который должен занимать несколько часов, растягивается на сутки и более. При этом наблюдается характерная динамика — в начале ТИИ работает быстро, но со временем скорость падения производительности становится катастрофической, а потребление оперативной памяти процессом 1cv8.exe вырастает в десятки раз. Разберем причины этого явления и рассмотрим эффективные способы ускорения процесса.
Основная причина деградации скорости заключается не в самой проверке данных, а в механизме вывода сообщений в графический интерфейс Конфигуратора. Проанализируем ситуацию: каждое исправление или обнаруженная ошибка сопровождаются выводом строки в окно сообщений (функция Сообщить()). При наличии сотен тысяч «битых» ссылок окно сообщений превращается в гигантский текстовый буфер, хранящийся в оперативной памяти.
Выясним основные факторы замедления:
Это самый эффективный и простой способ ускорить ТИИ без написания кода. Запуск Конфигуратора в пакетном режиме позволяет перенаправить весь вывод (сообщения) в текстовый файл, минуя графическую оболочку. Это полностью снимает проблему отрисовки окна сообщений и накопления данных в оперативной памяти процесса.
Рассмотрим структуру команды для запуска тестирования и исправления. Нам потребуется файл параметров и сама командная строка.
Пример команды для запуска:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" DESIGNER /F "D:\Bases\WorkBase" /N "Admin" /P "Password" /IBCheckAndRepair -Rebuild -NoQuestion /Out "C:\Logs\tii_log.txt" -Visible
Проанализируем используемые параметры:
DESIGNER — запуск в режиме Конфигуратора./IBCheckAndRepair — запуск непосредственно процедуры тестирования и исправления.-Rebuild — флаг, указывающий на необходимость восстановления (очистки) битых ссылок.-NoQuestion — подавление всех интерактивных запросов./Out "C:\Logs\tii_log.txt" — КЛЮЧЕВОЙ ПАРАМЕТР. Все сообщения будут записываться в файл tii_log.txt, а оперативная память останется свободной.Если в базе миллионы поврежденных объектов, запись каждого чиха в Журнал регистрации может стать «бутылочным горлышком». Перед запуском ТИИ целесообразно временно отключить регистрацию событий.
Рассмотрим по шагам, как это сделать:
Это позволит сократить количество дисковых операций и ускорить процесс внесения изменений в таблицы базы данных.
Иногда стандартное ТИИ работает слишком «тяжело», так как проверяет всю базу целиком. Если наша задача — только «грохнуть» битые ссылки (объекты с пометкой Object not found или Объект не найден), мы можем написать внешнюю обработку. Программный метод работает быстрее, так как мы можем управлять транзакциями и не вызывать лишних обработчиков.
Рассмотрим пример логики поиска битых ссылок в конкретном документе или справочнике. Мы проверяем, существует ли ссылка в базе данных с помощью метода ПолучитьОбъект() или через запрос к таблице.
Пример кода для поиска и очистки битых ссылок в реквизите:
Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
Изменено = Ложь;
// Проверяем конкретный реквизит, например, ОсновнойМенеджер
Если ЗначениеЗаполнено(Объект.ОсновнойМенеджер) И Объект.ОсновнойМенеджер.ПолучитьОбъект() = Неопределено Тогда
Объект.ОсновнойМенеджер = Справочники.Пользователи.ПустаяСсылка();
Изменено = Истина;
Сообщить("Исправлена битая ссылка в контрагенте: " + Объект.Наименование);
КонецЕсли;
Если Изменено Тогда
Объект.Записать();
КонецЕсли;
КонецЦикла;
Важный момент: Чтобы ускорить запись, можно использовать пакетную обработку в одной транзакции. Разберем ситуацию: фиксировать транзакцию после каждого исправления накладно. Лучше объединять исправления в блоки по 1000 записей.
Если процедура ТИИ запущена на SQL-сервере, замедление может быть связано с ростом файла лога транзакций (.ldf).
Проанализируем рекомендации для SQL-администратора:
Simple. Это предотвратит бесконтрольный рост лога транзакций и снизит нагрузку на диск.tempdb расположена на быстром диске (SSD/NVMe) и имеет достаточный объем, так как ТИИ активно использует временные таблицы для сравнения ссылок.UPDATE STATISTICS. Это поможет оптимизатору SQL-сервера выбирать наиболее быстрые планы запросов при поиске битых ссылок.Если ваше ТИИ «зависает» или потребляет всю память, не нужно ждать сутками. Выполните следующие действия:
/Out. Это решит проблему с памятью в 90% случаев.chdbfl.exe (в папке bin платформы) перед запуском ТИИ — она проверяет физическую целостность быстрее Конфигуратора.Помните, что чистота базы — это залог её быстродействия. Регулярное проведение регламентных работ небольшими порциями (по отдельным объектам метаданных) позволит избежать многодневных простоев системы.