При развитии бизнеса и усложнении учета часто возникает необходимость разделить единую информационную базу (например, «Управление торговым предприятием») на два отдельных контура: управленческий и бухгалтерский. Это позволяет разграничить права доступа, упростить обновление конфигураций и оптимизировать работу пользователей. Однако в процессе подготовки к разделению администраторы и технические специалисты часто сталкиваются с нереалистичными требованиями по ресурсам или неверной оценкой времени выполнения операций.
Разберем подробно, сколько на самом деле занимают операции выгрузки базы большого объема, почему не стоит проводить сквозную резку истории с прошлых лет и какова оптимальная методология разделения баз 1С.
Утверждения о том, что выгрузка информационной базы размером 67 Гб может занять около года, абсолютно не соответствуют действительности. Проанализируем реальные показатели скорости выполнения операций дампа и выгрузки для баз, работающих под управлением MS SQL Server:
.bak): Создание резервной копии базы объемом 67–150 Гб на сервере с дисками SATA/SAS или RAID-массивом занимает от 15 до 30 минут. Восстановление из дампа на аналогичное железо выполняется за 20–40 минут..dt): Формирование файла .dt через Конфигуратор 1С с проверкой целостности данных для базы объемом ~70 Гб занимает в среднем от 1,5 до 2 часов в зависимости от частоты процессора сервера и дисковой подсистемы. Загрузка файла .dt обычно длится от 3 до 6 часов.Завышенные требования специалистов к установке скоростных SSD-дисков чаще всего связаны не с самой операцией выгрузки, а с необходимостью развертывания отдельного тестового контура. Отладка тяжелых алгоритмов свёртки данных и массового перепроведения документов на рабочем сервере может приводить к высокой нагрузке на CPU и диски, что блокирует работу пользователей. Для работы разработчика оптимально предоставить отдельную тестовую среду с локальным SSD и лицензией MS SQL Server Developer Edition.
Частая ошибка при разделении учета — создание полной копии рабочей базы с последующей попыткой вырезать из нее «ненужные» документы за прошлые годы (например, с 2011 года) и выполнить полное перепроведение. Проанализируем, почему этот путь приводит к проблемам:
MS SQL Server, что приводит к роздутию файла журнала транзакций (.ldf) и переполнению служебных таблиц.Самым надежным, быстро реализуемым и технически чистым способом разделения баз является перенос нормативно-справочной информации (НСИ) и ввод начальных остатков на фиксированную дату (например, на 1 января текущего года).
Рассмотрим пошагово этот процесс:
Если в процессе подготовки разделенной базы вам все же требуется выполнить массовую загрузку или корректировку большого массива документов, используйте следующие технические приемы оптимизации платформы 1С и СУБД:
1. Отключение пересчета итогов регистров
Перед запуском массовых операций отключите автоматическое обновление итогов регистров накопления и бухгалтерии. Пересчет итогов выполняется один раз после завершения всех процедур.
// Отключение итогов для ускорения записи документов
РегистрыНакопления.Продажи.УстановитьИспользованиеИтогов(Ложь);
РегистрыБухгалтерии.Хозрасчетный.УстановитьИспользованиеИтогов(Ложь);
// ... Выполнение массовой обработки документов ...
// Включение итогов и их пересчет
РегистрыНакопления.Продажи.УстановитьИспользованиеИтогов(Истина);
РегистрыБухгалтерии.Хозрасчетный.УстановитьИспользованиеИтогов(Истина);
РегистрыНакопления.Продажи.ПересчитатьИтоги();
2. Пакетная обработка в транзакциях
Не записывайте и не проводите объекты по одному. Объединяйте обработку в порции по 500–1000 документов с явным фиксатором транзакции ЗафиксироватьТранзакцию().
ВыборкаДокументов = Документы.РеализацияТоваровУслуг.Выбрать(ДатаНачала, ДатаОкончания);
Счетчик = 0;
НачатьТранзакцию();
Пока ВыборкаДокументов.Следующий() Цикл
ДокументОбъект = ВыборкаДокументов.ПолучитьОбъект();
// Выполнение изменений
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Счетчик = Счетчик + 1;
Если Счетчик % 500 = 0 Тогда
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ЗафиксироватьТранзакцию();
КонецЕсли;
3. Перевод MS SQL в простую модель восстановления (Simple)
На время выполнения технических работ переведите модель восстановления базы MS SQL из режима Full в Simple. Это предотвратит бесконечный рост журнала транзакций .ldf и снизит нагрузку на диски. По завершении разделения баз выполните обслуживающие процедуры (реиндексацию ALTER INDEX REBUILD и обновление статистики) и верните режим Full.