Как организовать хранение и оптимизировать базу данных 1С объемом 250 Гб с 500 пользователями?

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

Рано или поздно перед любым администратором крупных информационных систем «1С» встает вопрос оптимизации дискового пространства и повышения производительности СУБД. Ситуация, когда рабочая база достигает размера 250 Гб при 500 активных пользователях, является классическим примером системы средней нагруженности. С одной стороны, база растет медленно, но с другой — запуск исторических отчетов за прошлые периоды начинает заметно снижать общую производительность системы.

В этой статье мы подробно проанализируем, почему стандартная свертка базы далеко не всегда является лучшим выходом, и разберем по шагам современные архитектурные подходы к масштабированию и оптимизации хранения данных на MS SQL Server.

Прежде чем приступать к радикальным мерам (таким как распределенные базы данных или правила обмена), давайте выясним реальные причины роста базы и рассмотрим альтернативные, более надежные варианты организации хранения.

Почему классическая свертка базы — это крайняя мера?

Идея «частично подчистить рабочую базу» на первый взгляд кажется логичной, но на практике она таит в себе множество подводных камней. Давайте разберем, почему опытные специалисты не рекомендуют прибегать к свертке без жесткой необходимости:

  1. Высокая трудозатратность: Процесс свертки регистров накопления и бухгалтерии требует огромного количества времени на подготовку, тестирование и исправление ошибок. Вам придется вручную разбираться с незакрытыми срезами и «зависшими» остатками.
  2. Нарушение целостности данных: При удалении старых документов часто ломаются ссылочные связи. Пользователи теряют возможность быстро посмотреть историю взаимодействия с контрагентом или историю изменения цен.
  3. Трудности с отчетностью: Если руководство потребует сформировать отчет по продажам за последние 5 лет, а данные за первые 3 года были удалены или агрегированы в свертку, вам придется разворачивать архивную копию и вручную консолидировать данные из двух разных баз.

Рассмотрим более эффективные и безопасные способы решения этой проблемы.

Решение 1. Оптимизация хранения файлов (внешние тома БСП)

Проанализируем структуру таблиц вашей базы в MS SQL Server. В 90% случаев основной объем базы занимают не текстовые данные документов, а присоединенные файлы: сканы договоров, PDF-счета, изображения товаров и архивы. Хранить такие «тяжелые» бинарные данные непосредственно внутри SQL-таблиц крайне неэффективно.

Использование Библиотеки стандартных подсистем (БСП) позволяет легко решить эту проблему, настроив хранение файлов во внешних томах на сетевом диске. Давайте разберем, как это работает:

  1. В режиме «1С:Предприятие» перейдем в раздел администрирования работы с файлами.
  2. Включим опцию хранения файлов в томах на диске.
  3. Создадим один или несколько томов (указав UNC-путь к сетевой папке, например \\server\storage\1c_files).
  4. Запустим стандартную обработку по переносу уже существующих файлов из базы данных во внешние тома.

Результат: База SQL мгновенно «худеет» (иногда на 50–70%), операции резервного копирования (бэкапы) начинают проходить в разы быстрее, а оперативная память сервера СУБД перестает тратиться на кэширование тяжелого бинарного контента.

Решение 2. Использование механизма копий баз данных

Начиная с платформы 8.3, в «1С» встроен штатный механизм создания копий баз данных. Этот инструмент идеально подходит для решения проблемы «тяжелых отчетов», которые мешают оперативной работе пользователей.

Мы можем настроить автоматическую репликацию выбранных таблиц (например, оборотных регистров, данных по продажам и закупкам) во внешнюю СУБД. В качестве получателя копии может выступать бесплатный PostgreSQL, развернутый на отдельном сервере, или специализированный Дата-акселератор (In-Memory DB от «1С»).

Начиная с версии платформы 8.3.27, Дата-акселератор поддерживает постоянное хранение данных на физическом диске. Это значит, что нам больше не нужно держать гигантские объемы оперативной памяти (ранее требовалось от 512 Гб RAM) — система подгружает архивные данные с диска по мере необходимости.

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


// Создание и активация копии базы данных
КопияБД = КопииБазДанных.СоздатьПараметрыКопии();
КопияБД.Имя = "АналитическаяКопия";
КопияБД.СУБД = ТипСУБДКопииБазыДанных.PostgreSQL;
КопияБД.СтрокаПодключения = "Srvr=""ArchiveServer"";Ref=""archive_db"";Usr=""admin"";Pwd=""password"";";

КопииБазДанных.ЗаписатьПараметрыКопии(КопияБД);
КопииБазДанных.АктивироватьКопию(КопияБД.Имя);

После этого все тяжелые отчеты, построенные на СКД, платформа будет автоматически перенаправлять на эту копию, полностью освобождая ресурсы основной рабочей базы на MS SQL.

Решение 3. Секционирование (партиционирование) таблиц на уровне MS SQL Server

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

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

  1. Создаем на сервере разные файловые группы (например, PRIMARY для текущего года и ARCHIVE для прошлых лет).
  2. Размещаем файловую группу текущего года на самых быстрых дисках NVMe SSD, а архивную группу — на более дешевых и медленных SATA SSD или HDD.
  3. Настраиваем функцию и схему секционирования в MS SQL, указывая в качестве разделителя дату документа или период регистра.

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

Решение 4. Гибридный архив с доступом по требованию (On-Demand)

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

  1. Создаем полную копию базы и называем ее «Архив». Она доступна пользователям только для чтения.
  2. В рабочей («Продуктивной») базе удаляем документы старше 3 лет. Вместо них вносим агрегированные остатки на начало архивного периода.
  3. Разрабатываем расширение конфигурации, которое добавляет на формы документов и списков кнопку «Запросить из архива».

Если пользователю раз в год действительно понадобится открыть старый документ, система выполнит быстрый фоновый запрос к архивной базе через HTTP или Web-сервисы и отобразит данные «на лету» без захламления рабочей базы.

Посмотрим на пример простейшего веб-сервиса для получения структуры старого документа в формате JSON:


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

Решение 5. Своевременное обслуживание индексов и статистики MS SQL

Иногда корень проблем кроется не в размере базы, а в отсутствии должного администрирования СУБД. База в 250 Гб для MS SQL Server является относительно небольшой, и при грамотной настройке она должна работать мгновенно.

Убедимся, что на сервере настроены регулярные регламентные задания:

Выполняя эти несложные рекомендации по оптимизации СУБД и выносу файлов во внешние тома, вы сможете сохранить целостность базы данных и обеспечить высокую скорость работы пользователей без необходимости проводить сложную и рискованную операцию свертки.

← На главную