Как уменьшить размер таблицы присоединенных файлов в 1С:ЗУП КОРП при хранении в томах

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

В процессе эксплуатации 1С:ЗУП КОРП системные администраторы часто сталкиваются с ситуацией, когда таблица присоединенных файлов (особенно для кандидатов) становится самой большой в базе данных, достигая десятков и сотен гигабайт. При этом настройки программы могут прямо указывать на то, что файлы должны храниться в томах на диске, а не в самой СУБД. Проанализируем, почему это происходит, и разберем по шагам, как эффективно уменьшить размер базы данных, сохранив работоспособность системы.

Выясняем причину: почему таблица в SQL остается большой

Прежде всего, нам необходимо понять физическую природу хранения данных в SQL Server. Если в настройках 1С установлена опция «В томах на диске», это еще не гарантирует, что база данных мгновенно станет легкой. Рассмотрим основные причины «раздувания» таблиц:

  1. Исторические данные: До включения настройки файлы записывались непосредственно в базу. Изменение настройки влияет только на новые файлы.
  2. Неполная миграция: Регламентное задание или обработка по переносу файлов в тома могли завершиться с ошибкой или не обработать часть записей.
  3. Особенности SQL Server (LOB-данные): Поля с типом VARBINARY(MAX), в которых хранятся двоичные данные, после удаления строк помечаются как свободные, но физически место в файле .mdf не освобождается до выполнения специальных процедур обслуживания.
  4. Дублирование: В некоторых случаях из-за сбоев ссылки указывают на тома, но сами бинарные данные продолжают занимать место в поле ФайлХранилище.

Шаг 1. Анализ распределения памяти в SQL Server

Проанализируем текущую ситуацию с помощью стандартных средств SQL Server Management Studio (SSMS). Нам нужно получить отчет об использовании дискового пространства таблицами. Выполним стандартный отчет «Disk Usage by Top Tables». Если мы видим, что таблица, соответствующая справочнику Справочник.КандидатыПрисоединенныеФайлы, занимает лидирующие позиции по объему данных, нам необходимо проверить содержимое поля, отвечающего за хранение контента.

Посмотрим на пример запроса, который поможет определить, сколько записей действительно имеют тип хранения «В томах», но при этом содержат данные внутри базы:


SELECT 
    COUNT(*) as CountFiles,
    SUM(DATALENGTH(DataField)) / 1024 / 1024 as SizeMB
FROM 
    _InfoRegXXXX -- Имя таблицы хранения данных файла
WHERE 
    _FldYYYY = 1 -- Условие, что тип хранения установлен "В томах"
    AND DATALENGTH(DataField) > 0;

Где DataField — это реквизит, хранящий двоичные данные (обычно в регистре сведений ПрисоединенныеФайлы или в соответствующих полях справочника в зависимости от версии платформы и конфигурации).

Шаг 2. Корректный перенос файлов в тома

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

Важно помнить: пока эта обработка не пройдет по всем записям успешно, данные будут оставаться в SQL. Проанализируем возможные ошибки при переносе:

Шаг 3. Обработка версий файлов

Часто программисты забывают, что основной объем данных может храниться не в самом справочнике присоединенных файлов, а в справочнике Справочник.ВерсииФайлов. В ЗУП КОРП для кандидатов может храниться история правок резюме или несколько вариантов тестовых заданий. Каждая такая версия — это отдельная бинарная запись в базе.

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

Шаг 4. Обслуживание SQL: Shrink и Rebuild

Допустим, мы удалили записи или перенесли их в тома, но файл базы данных не уменьшился. Рассмотрим, как заставить SQL Server вернуть место операционной системе.

Важный момент: Обычная команда SHRINKDATABASE часто не дает эффекта, если в таблицах высокая фрагментация. После массового удаления данных (LOB-данных) страницы в файле базы данных становятся разреженными.

Рекомендуем следующий алгоритм действий:

  1. Выполнить дефрагментацию или перестроение индексов (REBUILD INDEX) для проблемных таблиц. Это сгруппирует оставшиеся данные более плотно.
  2. Выполнить сжатие базы данных (SHRINK).

Пример команды для перестроения индекса:


ALTER INDEX ALL ON dbo._ReferenceXXXX REBUILD;
GO
DBCC SHRINKDATABASE (N'ИмяВашейБазы');

Шаг 5. Радикальная очистка через TRUNCATE (только для копий или пустых полей)

Как показала практика обсуждения на форуме, иногда единственный способ быстро освободить место — это использование команды TRUNCATE TABLE. Однако это деструктивная операция, которая полностью очищает таблицу.

Если вы убедились, что абсолютно все файлы уже находятся в томах на диске (проверили открываемость файлов из интерфейса 1С), а таблица в SQL все еще занимает гигабайты из-за «мусора» или старых логов, можно рассмотреть очистку на уровне СУБД в тестовой среде.

Если же файлы дублируются (и в базе, и в томах), но вы не хотите удалять записи целиком, можно программно очистить только бинарное поле в 1С:


Выборка = Справочники.КандидатыПрисоединенныеФайлы.Выбрать();
Пока Выборка.Следующий() Цикл
    Объект = Выборка.ПолучитьОбъект();
    // Проверяем, что файл точно в томе
    Если Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
        Объект.ТекстХранилище = ""; // Очистка текстового экстракта
        Объект.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); // Очистка самого файла
        Объект.Записать();
    КонецЕсли;
КонецЦикла;

Шаг 6. Полнотекстовый поиск

Проанализируем еще один скрытый источник потребления места — индекс полнотекстового поиска. В ЗУП КОРП поиск по содержимому резюме (DOCX, PDF) крайне важен для рекрутеров. Но если файлов тысячи, индекс может занимать значительный объем.

Если место критично, попробуйте временно отключить полнотекстовый поиск в разделе Администрирование — Полнотекстовый поиск, очистить индекс и посмотреть, насколько уменьшится база после сжатия. Если объем существенно сократился, значит, дело в индексах, и стоит пересмотреть список объектов, включенных в поиск.

Подведем итог: Борьба с размером таблицы присоединенных файлов в 1С:ЗУП КОРП требует комплексного подхода. Сначала мы обеспечиваем корректный перенос данных в тома, затем очищаем лишние версии, и только после этого приступаем к процедурам сжатия на уровне SQL Server. Помните, что любые действия напрямую с таблицами SQL должны производиться только после создания резервной копии и проверки целостности данных.

← На главную