При работе с крупными базами данных на платформе «1С:Предприятие 8.3» специалисты часто сталкиваются с проблемой стремительного роста объема таблиц. Одной из целей для оптимизации становятся объекты с префиксом «(не используется)», которые остаются в конфигурации после обновлений Библиотеки стандартных подсистем (БСП). Рассмотрим подробнее, можно ли безболезненно удалить данные из регистра сведений ОбъектыИнформационныхБаз и какие шаги необходимо предпринять, чтобы не нарушить работу обменов.
Для начала проанализируем, почему этот регистр вообще получил пометку «не используется». Данный объект входит в состав БСП и исторически отвечал за хранение связей (маппинга) между объектами текущей базы и объектами в других узлах обмена. В нем хранились уникальные идентификаторы (GUID), которые позволяли системе понимать, что «Товар А» в базе-источнике — это тот же «Товар А» в базе-приемнике.
С выходом новых версий БСП механизмы синхронизации были переработаны. Разработчики фирмы «1С» перенесли эти функции в новый регистр — СоответствияОбъектовИнформационныхБаз. Старый объект при этом не удаляется из метаданных сразу, чтобы дать системе возможность перенести данные в ходе обновления (процедуры обновления информационной базы).
Проанализируем ситуацию с точки зрения рисков. Если объект помечен префиксом «(не используется)», это означает, что в текущем релизе основной код конфигурации к нему не обращается. Однако существует несколько нюансов:
Посмотрим на пример поиска программного обращения к регистру:
// Пример поиска в коде (текстовый поиск по конфигурации)
// Ищем подстроку: "РегистрыСведений.ОбъектыИнформационныхБаз"
// Если вхождений в вашем коде нет, риск минимален.
Прежде чем приступать к удалению, мы должны убедиться, что данные действительно являются «мусором». Рассмотрим, как проверить, перенесены ли записи в актуальные механизмы БСП. Для этого сравним количество записей или наличие ключевых узлов в новом регистре СоответствияОбъектовИнформационныхБаз.
Также рекомендуется проверить, какие именно узлы обмена представлены в старом регистре. Зачастую там годами хранятся данные по узлам, которые давно удалены из монитора обмена данными.
Часто возникает вопрос: а стоит ли вообще тратить время на этот регистр? Если он занимает 10-50 Мб, то эффект от очистки будет незаметен. Но в базах объемом от 15 Гб и выше этот регистр может разрастаться до нескольких гигабайт. Рассмотрим, как узнать реальный размер таблицы.
Для клиент-серверного варианта (SQL Server):
Самый надежный способ — использовать стандартный отчет Disk Usage by Top Tables в SQL Server Management Studio (SSMS). Но как понять, какая таблица SQL соответствует нашему регистру? Для этого воспользуемся методом встроенного языка 1С:
Структура = ПолучитьСтруктуруХраненияБазыДанных("РегистрСведений.ОбъектыИнформационныхБаз");
Для Каждого Строка из Структура Цикл
Сообщить("Имя таблицы в SQL: " + Строка.ИмяТаблицыХранения);
КонецЦикла;
Для файлового варианта (.1CD):
В файловой версии стандартные средства 1С не показывают размер конкретных таблиц. Здесь нам поможет утилита Tool_1CD. Она позволяет открыть файл базы данных в монопольном режиме и увидеть список всех таблиц с указанием количества записей и объема в байтах. Это «золотой стандарт» для диагностики раздутых файловых баз.
Рассмотрим последовательность действий, которая минимизирует риски:
TRUNCATE, так как это может нарушить логику платформы (хотя для «неиспользуемых» объектов это менее критично). Лучше использовать средства 1С.Пример кода для полной очистки регистра:
НаборЗаписей = РегистрыСведений["(не используется) Объекты информационных баз"].СоздатьНаборЗаписей();
// Если нужно очистить все, просто записываем пустой набор
НаборЗаписей.Записать();
Сообщить("Регистр успешно очищен.");
Если записей слишком много (миллионы), очистка набора за один раз может вызвать переполнение лога транзакций в SQL. В таком случае разберем вариант порционного удаления (например, по измерениям или порциями по 100 000 записей).
Важно понимать: простое удаление записей из регистра не уменьшит физический размер файла базы данных на диске. Система просто пометит эти страницы памяти как свободные для будущих записей. Чтобы вернуть место операционной системе, выполним следующие действия:
В файловом варианте:
Необходимо зайти в Конфигуратор -> Администрирование -> Тестирование и исправление. Выбираем пункт «Сжатие таблиц информационной базы». Только после этого файл 1Cv8.1CD уменьшится в размере.
В клиент-серверном варианте:
Необходимо выполнить операцию Shrink Database или Shrink Files средствами SQL Server. Также полезно будет обновить статистики и перестроить индексы после массового удаления, чтобы производительность базы оставалась на высоком уровне.
Очистка регистра (не используется) Объекты информационных баз в 99% случаев безопасна и является стандартной процедурой «гигиены» информационной базы, особенно если вы перешли на современные версии конфигураций (УТ 11, БП 3.0, ERP). Главное — предварительно убедиться в отсутствии прямых обращений к нему в вашем коде и проверить работу актуальных механизмов обмена БСП. Использование инструментов анализа, таких как ПолучитьСтруктуруХраненияБазыДанных() и специализированных утилит, позволит вам точно оценить целесообразность этой процедуры.