При сопровождении высоконагруженных баз данных на платформе 1С:Предприятие системные администраторы нередко сталкиваются с ситуацией, когда размер базы данных в СУБД резко возрастает в разы за короткий промежуток времени. Подобный скачок приводит к падению производительности дисковой подсистемы, замедлению формирования отчетов и существенному увеличению времени резервного копирования. Разберем по шагам, как выявить объект метаданных 1С по имени физической таблицы в MS SQL Server, почему размер таблиц с файлами продолжает расти даже при настроенном хранении на сетевом диске и как корректно устранить раздувание базы.
Внутренняя архитектура платформы 1С транслирует объекты конфигурации в физические таблицы базы данных со специфическими системными именами (например, _InfoRg35777 для регистра сведений или _Document1234 для документа). Если анализ свободного места в среде SQL Server Management Studio показал, что подавляющую часть дискового пространства занимает конкретная таблица, выясним, какому объекту конфигурации она принадлежит.
Для сопоставления физических имен СУБД с логической структурой 1С платформа предоставляет встроенный метод ПолучитьСтруктуруХраненияБазыДанных(). Выполним программную выгрузку структуры с помощью следующего фрагмента кода во внешней обработке или консоли кода:
ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
Для Каждого СтрокаТаблицы Из ТаблицаСтруктуры Цикл
Если СтрокаТаблицы.ИмяТаблицыХранения = "_InfoRg35777" Тогда
Сообщить("Имя объекта 1С: " + СтрокаТаблицы.Имя);
Сообщить("Метаданные: " + СтрокаТаблицы.Метаданные);
Сообщить("Назначение: " + СтрокаТаблицы.Назначение);
КонецЕсли;
КонецЦикла;
Если при открытии внешней обработки платформа выдает ошибку Нарушение прав доступа, проверим права учетной записи. В современных версиях платформы 1С:Предприятие 8.3 помимо роли АдминистраторСистемы и полных прав требуется наличие отдельного права ИнтерактивноеОткрытиеВнешнихОбработок. Назначим эту роль в профиле групп доступа текущего пользователя.
В рассматриваемом сценарии таблица _InfoRg35777 соответствует регистру РегистрСведений.ПрисоединенныеФайлы, содержащему реквизиты ПрисоединенныйФайл и ХранимыйФайл. Тип данных поля ХранимыйФайл представляет собой ХранилищеЗначения, которое на уровне MS SQL хранится как массив бинарных данных (BLOB). Именно накопление двоичных данных внутри таблицы приводит к лавинообразному росту файла данных .mdf.
Часто в настройках конфигурации 1С:ERP режим Хранить файлы в томах на диске уже активирован, однако регистрация файлов продолжает раздувать СУБД. Проанализируем основные причины такого поведения платформы:
1C:Enterprise Server (по умолчанию работающая под учетной записью usr1cv8 или NETWORK SERVICE). Если у этой службы отсутствуют права на чтение и запись в сетевую папку (UNC-путь), платформа не прерывает работу с ошибкой, а автоматически переключается на резервный механизм сохранения файла внутрь таблицы базы данных.Разберем последовательность действий, которая позволит перенести двоичные данные из СУБД на файловый сервер и стабилизировать объем базы данных.
ХранимыйФайл регистра сведений, запишет их в файлы на сетевой шаре и очистит поле внутри СУБД, оставив в базе только путь к физическому файлу.
ВЫБРАТЬ
ТипЗнч(Файлы.ВладелецФайла) КАК ТипВладельца,
КОЛИЧЕСТВО(Файлы.Ссылка) КАК КоличествоФайлов
ИЗ
Справочник.НоменклатураПрисоединенныеФайлы КАК Файлы
СГРУППИРОВАТЬ ПО
ТипЗнч(Файлы.ВладелецФайла)
Аналогичным образом проанализируем справочники ЭлектронноеПисьмоВходящееПрисоединенныеФайлы и присоединенные файлы к первичным документам.
Обратим особое внимание на специфику освобождения дискового пространства в Microsoft SQL Server. После успешного переноса файлов в тома объем таблицы _InfoRg35777 не уменьшится в операционной системе моментально. СУБД помечает страницы LOB-данных как свободные, но оставляет файл базы данных .mdf прежнего физического размера для будущих операций вставки.
Важное замечание по регламентным планам обслуживания: ежедневное выполнение операции сжатия базы данных (SHRINKDATABASE или SHRINKFILE) в связке с реиндексацией является критической ошибкой администрирования. Сжатие приводит к полной фрагментации индексов и лавинообразному росту журнала транзакций. Процедуру сжатия допустимо выполнять только однократно после массового удаления или переноса гигабайтов бинарных данных, после чего обязательно необходимо выполнить перестроение индексов (ALTER INDEX ... REBUILD) и обновление статистик базы данных.