Как предотвратить переполнение диска C при загрузке информационной базы 1С из файла DT?

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

Типовая конфигурация сервера для 1С:Предприятия и Microsoft SQL Server нередко предусматривает разделение дискового пространства на два накопителя: системный том C: (на котором развернуты операционная система Windows Server, исполняемые файлы СУБД и серверной платформы 1С) и выделенный том D: (предназначенный для хранения файлов рабочих баз данных). При создании базы в консоли администрирования 1С и в среде SQL Server ее основные файлы данных (.mdf) и журнала транзакций (.ldf) корректно размещаются на диске D:. Однако при выполнении стандартной операции «Загрузить информационную базу...» из файла выгрузки .dt через конфигуратор свободное место на диске C: начинает стремительно сокращаться, вплоть до полного исчерпания и аварийной остановки процесса с ошибками ввода-вывода или нехватки памяти.

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

Факторы, вызывающие рост дискового пространства на диске C

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

Шаг 1. Локализация источника проблемы

Перед внесением изменений в конфигурацию сервера необходимо определить, какая именно подсистема утилизирует объем диска. Для этого во время запуска процедуры загрузки базы выполняется экспресс-мониторинг:

  1. В окне диспетчера задач или монитора ресурсов (Resource Monitor) на вкладке «Диск» проверяются процессы с наибольшей интенсивностью записи: sqlservr.exe, rphost.exe или 1cv8.exe.
  2. Проверяется текущий физический размер файлов базы tempdb. В среде SQL Server Management Studio (SSMS) выполняется запрос:
    
    SELECT name, physical_name AS CurrentLocation, (size * 8 / 1024) AS SizeMB
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    
  3. Проверяется размер директорий C:\Program Files\1cv8\srvinfo и C:\Users\usr1cv8\AppData\Local\Temp.
  4. Фиксируется объем системного файла подкачки C:\pagefile.sys.

Шаг 2. Перенос системной базы данных tempdb на несистемный диск

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

Для переноса всех файлов (основного, дополнительных файлов данных и журнала транзакций) на диск D: выполняется следующий порядок действий:

  1. На диске D: создается каталог для размещения файлов базы, например D:\MSSQL\TempDB. Службе SQL Server (учетной записи, от имени которой она запущена) предоставляются полные права доступа (NTFS) на эту папку.
  2. В SSMS выполняется пакет команд для изменения метаданных расположения файлов:
    
    USE master;
    GO
    
    ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'D:\MSSQL\TempDB\tempdev.mdf');
    GO
    
    ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'D:\MSSQL\TempDB\templog.ldf');
    GO
    

    Если в экземпляре SQL Server настроено несколько файлов данных tempdb (по числу ядер процессора: temp2, temp3 и далее), для каждого из них выполняется аналогичная инструкция с указанием соответствующего логического имени и нового пути к файлу с расширением .ndf.

  3. Для автоматического формирования команд для абсолютно всех файлов tempdb можно применить генератор скрипта:
    
    SELECT 'ALTER DATABASE tempdb MODIFY FILE (NAME = [' + name + '], FILENAME = ''D:\MSSQL\TempDB\' + name + CASE WHEN type = 0 THEN '.mdf' ELSE '.ldf' END + ''');'
    FROM sys.master_files
    WHERE database_id = DB_ID('tempdb');
    
  4. Перезапускается служба SQL Server (Database Engine). При запуске сервер автоматически создаст чистые файлы tempdb в новом каталоге на диске D:.
  5. Старые файлы tempdb на диске C: удаляются вручную после подтверждения успешного старта службы.

Ограничения: учетная запись службы SQL Server обязательно должна иметь разрешение на чтение и запись в целевой каталог, а также privilege «Выполнение задач по обслуживанию томов» (Perform Volume Maintenance Tasks) для мгновенной инициализации файлов данных без задержек.

Шаг 3. Перенос служебного каталога кластера 1С (srvinfo)

Если в процессе загрузки переполняется подкаталог srvinfo, содержащий кэш конфигураций и временные файлы сеансов, требуется изменить параметры запуска службы агента сервера 1С.

  1. Останавливается служба «Агент сервера 1С:Предприятия 8.3» через оснастку управления службами (services.msc).
  2. Запускается редактор реестра regedit и выполняется переход в ветку: HKLM\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (x86-64) (или соответствующую 32-разрядной версии).
  3. В строковом параметре ImagePath находится ключ -d, задающий рабочий каталог. Значение по умолчанию -d "C:\Program Files\1cv8\srvinfo" заменяется на путь к новому каталогу на диске D:, например -d "D:\1C\srvinfo".
  4. Содержимое исходной папки srvinfo физически копируется в новый каталог D:\1C\srvinfo с сохранением структуры подпапок.
  5. Назначьте полные права управления новой директорией для пользователя операционной системы, от которого запускается служба 1С (по умолчанию USR1CV8).
  6. Служба агента сервера 1С запускается снова.

Важное ограничение: при установке обновления платформы 1С:Предприятие инсталлятор заново регистрирует службу агента кластера в реестре, сбрасывая параметр -d на системный диск. После каждого обновления платформы необходимо повторно проверять и корректировать параметр ImagePath.

Шаг 4. Перенаправление каталогов временных файлов (TEMP)

Распаковка содержимого выгрузки .dt выполняется во временную папку. Если процедура выполняется на стороне сервера учетной записью USR1CV8, место расходуется в ее профиле. Если загрузка выполняется локальным клиентом конфигуратора, задействуется профиль текущего администратора.

Наиболее надежный способ исключить обращение к диску C: без перенастройки системных профилей Windows — использование символических связей каталогов файловой системы NTFS (Junction Points):

  1. Останавливаются службы 1С и закрываются все сеансы конфигуратора.
  2. Создается каталог на диске D:, например D:\Temp\1C_usr1cv8, и предоставляются права учетной записи USR1CV8.
  3. Очищается или переименовывается стандартный каталог: C:\Users\usr1cv8\AppData\Local\Temp.
  4. В командной строке, запущенной от имени администратора, создается связь директорий: mklink /D "C:\Users\usr1cv8\AppData\Local\Temp" "D:\Temp\1C_usr1cv8"

При необходимости аналогичная ссылка создается для глобальных системных каталогов C:\Temp или переменной %TEMP% учетной записи администратора, выполняющего операцию загрузки через конфигуратор.

Шаг 5. Настройка файла подкачки Windows

Если оперативная память сервера загружена полностью, диспетчер памяти Windows выделяет дополнительное пространство в файле pagefile.sys. Если файл подкачки настроен на автоматический выбор размера на диске C:, он может занять все оставшееся место.

  1. Откройте окно свойств системы комбинацией клавиш Win + R и командой systempropertiesadvanced.
  2. В блоке «Быстродействие» нажмите «Параметры», перейдите на вкладку «Дополнительно» и в блоке «Виртуальная память» нажмите «Изменить».
  3. Снимите флаг «Автоматически выбирать объем файла подкачки».
  4. Выберите диск C:, укажите фиксированный небольшой размер (например, 1024 МБ для записи критических дампов ядра при сбоях) либо вариант «Без файла подкачки», затем обязательно нажмите кнопку «Задать».
  5. Выберите диск D:, установите переключатель в положение «Размер по выбору системы» или задайте статический размер, соответствующий объему ОЗУ, и нажмите кнопку «Задать».
  6. Подтвердите изменения нажатием кнопки «ОК» и перезагрузите сервер в технологическое окно.

Ограничения формата DT и альтернативный регламент

Механизм выгрузки и загрузки базы данных средствами платформы (формат .dt) проектировался разработчиками 1С исключительно для целей резервного копирования небольших информационных баз файлового типа или для миграции между различными СУБД (например, при переходе с Microsoft SQL Server на PostgreSQL).

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

Для штатного развертывания и восстановления баз на MS SQL Server следует использовать встроенные средства СУБД — создание резервной копии в файл .bak и восстановление командой RESTORE DATABASE с указанием явных путей размещения файлов данных и лога исключительно на диске D:. Это полностью исключает участие временных каталогов 1С и минимизирует паразитное разрастание системной базы tempdb.

← На главную