Как уменьшить копию большой БД при нехватке места на диске?

Системный администратор
← На главную

Часто в работе администраторов и разработчиков 1С возникает ситуация, когда рабочая база данных разрастается до внушительных размеров (например, 3 Тб и более), а свободного дискового пространства для развертывания полноценной копии для разработки или тестирования не хватает. Рассмотрим, как можно решить эту проблему, используя различные подходы: от организационных до глубоко технических.

Анализ структуры данных

Прежде чем приступать к техническим манипуляциям, необходимо проанализировать состав базы данных. Часто львиную долю объема занимают второстепенные объекты: журналы регистрации, логи обмена, исторические таблицы, которые уже не требуются для повседневной разработки. Проведите аудит размеров таблиц с помощью стандартных отчетов SQL Server Management Studio. Если вы обнаружите таблицы с историей или логами, занимающие сотни гигабайт, рассмотрите возможность их очистки или архивирования.

Метод свертки базы данных

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

  1. Создайте пустую копию конфигурации базы данных.
  2. Напишите скрипт на языке T-SQL, который будет переносить только необходимые справочники и документы за последний месяц (или иной период).
  3. Настройте процесс загрузки данных, исключая тяжелые исторические регистры, которые не влияют на логику работы алгоритмов в текущем периоде.

Этот подход позволяет получить рабочую тестовую среду с актуальными данными, занимающую в десятки раз меньше места, чем оригинал.

Использование внешних хранилищ и символических ссылок

Если сервер физически не позволяет расширить дисковое пространство, рассмотрите вариант использования внешнего хранилища или даже обычных жестких дисков, подключенных к системе. Для обхода ограничений при развертывании bak-файла, можно воспользоваться приемом с символическими ссылками:

Разберем это по шагам:

  1. Подключите внешнее хранилище к серверу.
  2. Определите папку, которую MS SQL Server использует для временных файлов или куда планируется развернуть файлы MDF и LDF.
  3. С помощью команды mklink /j в операционной системе создайте символическую ссылку, перенаправляющую запросы к этой папке на внешнее устройство.

Это позволит «обмануть» СУБД, перенеся нагрузку по хранению данных на менее дорогостоящие носители в процессе восстановления базы.

Автоматизация подготовки тестовых данных

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

Пример логики такой обработки может выглядеть следующим образом:


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

Оптимизация на уровне СУБД

Если же необходимость разворачивать полную копию остается, обратите внимание на возможности сжатия данных (Data Compression). В MS SQL Server существуют настройки сжатия на уровне страниц или строк, которые могут значительно уменьшить физический объем файлов БД. После сжатия данных в рабочей базе размер бэкапа также сократится, что позволит поместить его на доступные дисковые ресурсы.

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

Заключение

Развертывание копии большой базы — это комплексная задача. Мы разобрали, что физическое отсутствие места можно компенсировать либо сверткой данных, либо использованием внешних хранилищ, либо оптимизацией самой рабочей БД. Главное — перестать хранить в основной базе «мертвые» данные, которые не несут бизнес-ценности, и перейти к осознанному управлению объемом информации.

← На главную