Почему долго выгружается база 1С в формат dt на новых серверах Windows 2025 и SQL 2025

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

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

В этой статье мы подробно разберем, почему так происходит, как на это влияет обновленный механизм хранения двоичных данных в платформе 1С и какие настройки сервера помогут вернуть былую скорость работы.

Разбираем механику проблемы: SQL против платформы 1С

Рассмотрим ситуацию, описанную в обсуждении. При мониторинге плана запроса видно, что чтение идет по кластерному индексу, но скорость передачи данных ничтожно мала. Проблема здесь чаще всего кроется не в самом SQL-сервере, а в том, как платформа 1С запрашивает и обрабатывает данные для сериализации в формат .dt.

Выгрузка в .dt — это не простое копирование таблиц. Это последовательное чтение данных через сервер приложений 1С, их преобразование во внутренний формат и сжатие. Если в таблице присутствуют поля типа ХранилищеЗначения или ссылки на таблицу BinaryData, процесс существенно усложняется.

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


// Заполнение справочника двоичными данными
&НаСервере
Процедура СоздатьНаСервереДвоичные()
    Двоичное = Новый ДвоичныеДанные("C:\tmp\large_file.dat");
    Для Сч = 1 По 1000 Цикл
        Элемент = Справочники.СправочникСБлобами.СоздатьЭлемент();
        Элемент.Наименование = "Файл " + Строка(Сч);
        Элемент.Данные = Новый ХранилищеЗначения(Двоичное);
        Элемент.Записать();
    КонецЦикла;
КонецПроцедуры

// Заполнение справочника длинными строками
&НаСервере
Процедура СоздатьНаСервереСтроки()
    Чтение = Новый ЧтениеТекста("D:\tmp\large_text.txt");
    Данные = Чтение.Прочитать();
    Для Сч = 1 По 1000 Цикл
        Элемент = Справочники.СправочникСоСтроками.СоздатьЭлемент();
        Элемент.Наименование = "Текст " + Строка(Сч);
        Элемент.Текст = Данные;
        Элемент.Записать();
    КонецЦикла;
КонецПроцедуры

Практика показывает, что база со строками того же объема выгрузится в разы быстрее, чем база с ХранилищемЗначения. Это связано с тем, что для двоичных данных платформа использует более сложные механизмы обращения к СУБД, часто выполняя дополнительные микро-запросы для извлечения каждого блока данных.

Влияние таблицы BinaryData в новых версиях платформы

Начиная с версии 8.3.21, в структуре баз 1С появилась системная таблица BinaryData. Платформа стремится оптимизировать хранение файлов, вынося их в отдельное блочное хранилище. Однако при выгрузке в .dt это может приводить к эффекту «N+1 запроса», когда для каждой записи основной таблицы сервер приложений делает отдельный запрос к BinaryData.

Чтобы проверить, насколько «тяжела» ваша таблица двоичных данных, выполните следующие запросы в SQL Management Studio:


-- Узнаем количество записей в блочном хранилище
SELECT count(*) FROM [ИмяВашейБазы].[dbo].[BinaryData];

-- Узнаем суммарный объем данных в мегабайтах
SELECT sum(datalength(f_data))/1024/1024 FROM [ИмяВашейБазы].[dbo].[BinaryData];

Если количество записей исчисляется сотнями тысяч (как в примере — 318 000), даже при небольшом общем объеме (1.3 Гб), это создает колоссальную нагрузку на процессор при сериализации. Каждая запись — это отдельный объект, который 1С должна десериализовать, проверить и упаковать. Для наглядного анализа структуры хранения и быстрого поиска таких разросшихся таблиц пригодится инструмент для визуализации физического размера таблиц базы данных.

Решение 1: Тонкая настройка SQL Server 2022/2025

Новые версии SQL Server обладают функциями интеллектуальной обработки запросов (Intelligent Query Processing), которые иногда могут ошибаться на специфических запросах 1С. Рассмотрим шаги по оптимизации СУБД:

  1. Понижение уровня совместимости (Compatibility Level). Даже если вы используете SQL Server 2025, попробуйте установить уровень совместимости базы данных на 150 (SQL Server 2019). Это отключит некоторые новые механизмы оптимизатора, которые могут конфликтовать с логикой выгрузки 1С.
  2. Query Store. В новых версиях эта функция включена по умолчанию. Попробуйте временно отключить её или очистить кэш запросов. Запись статистики о каждом микро-запросе во время выгрузки может создавать лишнюю нагрузку на диски.
  3. Параметр Max Degree of Parallelism (MAXDOP). Для баз 1С рекомендуется устанавливать MAXDOP = 1 или MAXDOP = 2, чтобы предотвратить избыточное распараллеливание простых запросов на чтение, что часто случается при выгрузке.

Решение 2: Оптимизация сетевого стека и настроек Windows

Windows Server 2025 ввел новые алгоритмы энергосбережения и обработки сетевого трафика. Проанализируем настройки ОС, которые могут влиять на скорость взаимодействия сервера 1С и SQL:

  1. Power Plan (Схема электропитания). Убедитесь, что установлена схема «High Performance» (Высокая производительность). В режиме «Balanced» процессор может не поднимать частоту во время однопоточных операций, которыми во многом является выгрузка в .dt.
  2. Receive Segment Coalescing (RSC). На виртуальных машинах эта технология объединения пакетов может вызывать задержки в передаче данных. Рекомендуется отключить её на сетевом адаптере через PowerShell: Disable-NetAdapterRsc -Name "ИмяАдаптера".
  3. Исключения антивируса. Убедитесь, что папки временных файлов (%TEMP%) пользователя, под которым работает служба 1С, и папки данных SQL Server добавлены в исключения Windows Defender или стороннего антивируса. При выгрузке 1С активно создает временные файлы, и их проверка «на лету» замедлит процесс в разы.

Решение 3: Очистка и исправление BinaryData

Если вы обнаружили, что проблема именно в таблице BinaryData, простым удалением записей через TRUNCATE в SQL проблему не решить — вы получите ошибку «Ошибка блочного хранения двоичных данных» при попытке выгрузки. Это происходит из-за нарушения ссылочной целостности внутри метаданных 1С.

Алгоритм правильной очистки:

  1. Выполните Тестирование и исправление (ТИИ) в конфигураторе.
  2. Обязательно включите флаг «Сжатие таблиц информационной базы» и «Проверка ссылочной целостности» с опцией «Очищать ссылки».
  3. Если данных в BinaryData много, этот процесс может занять много времени (иногда всю ночь), но он необходим для удаления «битых» связей, которые тормозят выгрузку.

Стоит ли использовать dt в современных реалиях?

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

Рекомендуемый подход: используйте средства Native Backup самого SQL Server. Бэкап в формате .bak выполняется в десятки раз быстрее, поддерживает инкрементальное копирование и сжатие на уровне СУБД, не требуя остановки работы пользователей и не страдая от особенностей таблицы BinaryData. Для автоматизации этого процесса отлично подойдут скрипты для резервного копирования и обслуживания баз SQL.

← На главную