Как быстро проверить логическую и ссылочную целостность в базе 1С большого объема?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Промышленность, строительство и АПК
← На главную

Проверка целостности больших баз данных, таких как 1С:ERP Управление предприятием объемом 300 ГБ, часто становится серьезным испытанием для администратора или разработчика. Стандартный механизм Тестирование и исправление (ТиИ), встроенный в Конфигуратор, при работе с огромными объемами данных зачастую блокирует таблицы на долгое время или вовсе не завершается за приемлемый срок. Рассмотрим, как подойти к этой задаче эффективнее.

Почему стандартная проверка работает так долго?

Механизм Тестирование и исправление выполняет комплексную задачу, сканируя все таблицы SQL-сервера и проверяя связи между объектами. В базах ERP количество таблиц и их взаимосвязи измеряются тысячами, что при стандартном подходе приводит к колоссальным затратам ресурсов дисковой подсистемы и логов транзакций. Если проверка идет более 5 дней, велика вероятность, что система сталкивается с неоптимальными планами выполнения запросов или блокировками.

Оптимизация проверки через обновление платформы

Прежде чем прибегать к сложным методам, рассмотрим официальные возможности платформы. Фирма «1С» активно работает над быстродействием инструментов обслуживания баз данных. Начиная с версии 8.3.23, были внесены значительные доработки по повышению производительности платформы при выполнении операций обслуживания.

В новых версиях платформы оптимизирована работа с метаданными и изменены алгоритмы сканирования таблиц. Это позволяет существенно сократить время выполнения операций, которые ранее были «узким горлышком» для крупных внедрений. Рекомендуем в первую очередь проверить актуальную версию платформы и, если она ниже 8.3.23, спланировать обновление.

Использование инструментов сторонних разработчиков для поиска битых ссылок

Если обновление платформы не помогает или требуется найти «битые» ссылки здесь и сейчас, целесообразно использовать специализированные внешние инструменты. Они работают быстрее штатного Тестирование и исправление, так как используют прямые SQL-запросы к таблицам базы данных, минуя сложные объектные механизмы 1С.

  1. Выявление идентификаторов: Сторонние утилиты для Поиска битых ссылок позволяют получить список GUID объектов, на которые ссылаются данные, но сами объекты отсутствуют в базе.
  2. Точечное исправление: Имея на руках список проблемных записей, мы можем исправить их через Обработку или код, не затрагивая всю базу целиком.
  3. Скорость выполнения: Поскольку инструмент не блокирует всю базу для полноценного ТиИ, поиск происходит значительно быстрее, так как считываются только нужные метаданные.

Стратегия ручного исправления ссылок

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

  1. Замена ссылки на пустую: В коде мы находим объект, содержащий битую ссылку, и принудительно очищаем поле.
  2. Создание объектов: Если битая ссылка указывает на важный объект, который был случайно удален, мы можем программно восстановить его, создав новый объект с нужным GUID.

Для исправления можно использовать следующий алгоритм работы через Объектную модель:


// Пример логики поиска и очистки битой ссылки
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
    Если ЗначениеЗаполнено(Выборка.Ссылка) И НЕ СсылкаСуществует(Выборка.Ссылка) Тогда
        Объект = Выборка.ПолучитьОбъект();
        Объект.СсылкаНаБитыйОбъект = Неопределено;
        Объект.Записать();
    КонецЕсли;
КонецЦикла;

Рекомендации по обслуживанию SQL-сервера

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

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

← На главную