Проверка целостности больших баз данных, таких как 1С:ERP Управление предприятием объемом 300 ГБ, часто становится серьезным испытанием для администратора или разработчика. Стандартный механизм Тестирование и исправление (ТиИ), встроенный в Конфигуратор, при работе с огромными объемами данных зачастую блокирует таблицы на долгое время или вовсе не завершается за приемлемый срок. Рассмотрим, как подойти к этой задаче эффективнее.
Механизм Тестирование и исправление выполняет комплексную задачу, сканируя все таблицы SQL-сервера и проверяя связи между объектами. В базах ERP количество таблиц и их взаимосвязи измеряются тысячами, что при стандартном подходе приводит к колоссальным затратам ресурсов дисковой подсистемы и логов транзакций. Если проверка идет более 5 дней, велика вероятность, что система сталкивается с неоптимальными планами выполнения запросов или блокировками.
Прежде чем прибегать к сложным методам, рассмотрим официальные возможности платформы. Фирма «1С» активно работает над быстродействием инструментов обслуживания баз данных. Начиная с версии 8.3.23, были внесены значительные доработки по повышению производительности платформы при выполнении операций обслуживания.
В новых версиях платформы оптимизирована работа с метаданными и изменены алгоритмы сканирования таблиц. Это позволяет существенно сократить время выполнения операций, которые ранее были «узким горлышком» для крупных внедрений. Рекомендуем в первую очередь проверить актуальную версию платформы и, если она ниже 8.3.23, спланировать обновление.
Если обновление платформы не помогает или требуется найти «битые» ссылки здесь и сейчас, целесообразно использовать специализированные внешние инструменты. Они работают быстрее штатного Тестирование и исправление, так как используют прямые SQL-запросы к таблицам базы данных, минуя сложные объектные механизмы 1С.
Поиска битых ссылок позволяют получить список GUID объектов, на которые ссылаются данные, но сами объекты отсутствуют в базе.Обработку или код, не затрагивая всю базу целиком.Разберем, как поступить, когда битые ссылки уже найдены. После того как мы получили список неверных ссылок, у нас есть два пути для их обработки:
GUID.Для исправления можно использовать следующий алгоритм работы через Объектную модель:
// Пример логики поиска и очистки битой ссылки
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Если ЗначениеЗаполнено(Выборка.Ссылка) И НЕ СсылкаСуществует(Выборка.Ссылка) Тогда
Объект = Выборка.ПолучитьОбъект();
Объект.СсылкаНаБитыйОбъект = Неопределено;
Объект.Записать();
КонецЕсли;
КонецЦикла;
Даже при использовании внешних инструментов, производительность сильно зависит от состояния SQL-сервера. Рассмотрим шаги, которые ускорят любую проверку:
SQL обновлена. Устаревшая статистика заставляет оптимизатор выбирать неэффективные пути поиска данных.LDF) достаточно свободного места, чтобы избежать аварийной остановки сервера из-за переполнения.Подводя итог, помните: нет необходимости запускать полную проверку целостности, если вы знаете, что проблема локальна. Используйте современные версии платформы и специализированные инструменты для быстрого поиска GUID-ов, что сбережет ресурсы вашего сервера и время команды.