Разработчики 1С часто сталкиваются с крайне неприятной проблемой: после разворачивания резервной копии базы данных (особенно крупной, например, «Бухгалтерии предприятия» версий 2.0 или 3.0) попытка подключиться к хранилищу конфигурации вызывает критическое зависание системы. Процесс «запора» (реструктуризации, связывания, обновления версий) может затягиваться на час, два или даже более. В это время Конфигуратор выглядит зависшим, нагружая процессор и дисковую подсистему.
В этой статье мы подробно разберем, почему возникает эта проблема, как оптимизировать работу хранилища 1С, как правильно очищать локальный кэш и как полностью автоматизировать процесс переподключения и обновления конфигурации базы данных с помощью готовых скриптов автоматизации.
Для начала проанализируем технические причины медленной работы. Основная проблема кроется в архитектуре самого хранилища 1С и способах взаимодействия с ним по сети. Выделим ключевые факторы замедления:
\\Server\1C_Repo), операционная система накладывает жесткие файловые блокировки. При каждом обращении Конфигуратор совершает тысячи мелких последовательных запросов на чтение и запись файла базы данных хранилища 1Cv8ddb.1CD. Сетевые задержки при этом суммируются, превращая пятиминутную операцию в многочасовое ожидание.data) создается огромное количество мелких файлов версий. Со временем база данных хранилища сильно фрагментируется, а индексы поиска по версиям раздуваются.Ниже мы подробно разберем по шагам, как решить каждую из этих проблем и настроить быструю работу.
Если вы до сих пор используете подключение через сетевой диск (протокол file://), это первое, что необходимо исправить. Настоятельно рекомендуем развернуть службу сервера хранилища конфигураций 1С (crserver.exe).
При использовании сервера хранилища все операции по чтению и записи файлов выполняет сама служба локально на сервере, а клиенту (Конфигуратору) передаются только сжатые пакеты данных по протоколу TCP. Это снижает нагрузку на сеть и ускоряет отклик в 5–10 раз.
После запуска службы адрес подключения изменится с файлового пути на сетевой адрес следующего формата:
tcp://ИмяСервера/ИмяХранилища
Среди разработчиков бытует заблуждение, что оптимизация хранилища нужна только при огромном количестве файлов и папок. На самом деле регулярная дефрагментация необходима любому активному хранилищу.
Процедура оптимизации упаковывает разрозненные мелкие файлы версий в единые архивы и сжимает базу данных хранилища. Запустить оптимизацию можно из Конфигуратора через меню: Конфигурация — Хранилище конфигурации — Администратор хранилища — Оптимизация данных.
Также эту операцию можно выполнять автоматически во внерабочее время с помощью пакетного запуска Конфигуратора с ключом /ConfigurationRepositoryOptimizeData. Регулярная (например, еженедельная) оптимизация сокращает время первичного подключения к хранилищу в несколько раз.
Если при попытке подключения Конфигуратор намертво зависает, часто помогает принудительная очистка локального кэша хранилища на стороне разработчика. Платформа хранит этот кэш локально на компьютере.
Выполним очистку по шагам:
%LOCALAPPDATA%\1C\1cv8\<Уникальный_ID_базы>\cfgrepo
cfgrepo.Полезный лайфхак: Если вы хотите сохранить историю ваших локально введенных комментариев к коммитам, удаляйте из этой папки все файлы и подкаталоги, кроме файла с именем comments.
Также сбросить кэш можно программно, используя ключи пакетного запуска Конфигуратора /ConfigurationRepositoryClearCache или /ConfigurationRepositoryClearLocalCache.
Если вам часто приходится разворачивать бэкапы баз данных в тестовые среды, выполнять ручное отключение, подключение и связывание конфигурации с хранилищем крайне неэффективно. Этот процесс можно полностью автоматизировать с помощью командного файла Windows (батника).
Рассмотрим готовый, оптимизированный вариант скрипта, который подключает базу к хранилищу и обновляет конфигурацию базы данных. Обратите внимание на использование ключа /DisableStartupDialogs, который подавляет модальные окна и предотвращает зависание процесса в ожидании реакции пользователя.
@echo off
rem Кодировка файла должна быть OEM 866 для корректного отображения кириллицы в консоли
echo Время начала операции: %TIME%
rem 1. Этап подключения ранее не связанной информационной базы к хранилищу
echo Подключение базы к хранилищу конфигурации... %TIME%
"C:\Program Files\1cv8\8.3.11.2924\bin\1cv8.exe" DESIGNER ^
/F "D:\1C\Bases\TestBase" ^
/N "Администратор" ^
/P "ПарольАдминаБазы" ^
/Out "log_Step1_Bind.txt" ^
/ConfigurationRepositoryF "tcp://MyServer/Rep_Accounting" ^
/ConfigurationRepositoryN "UsernameRepository" ^
/ConfigurationRepositoryP "PasswordRepository" ^
/ConfigurationRepositoryBindCfg ^
-forceBindAlreadyBindedUser ^
-forceReplaceCfg ^
/DisableStartupDialogs
rem 2. Этап обновления конфигурации базы данных (динамическое обновление)
echo Обновление конфигурации базы данных... %TIME%
"C:\Program Files\1cv8\8.3.11.2924\bin\1cv8.exe" DESIGNER ^
/F "D:\1C\Bases\TestBase" ^
/N "Администратор" ^
/P "ПарольАдминаБазы" ^
/Out "log_Step2_UpdateDB.txt" ^
/ConfigurationRepositoryF "tcp://MyServer/Rep_Accounting" ^
/ConfigurationRepositoryN "UsernameRepository" ^
/ConfigurationRepositoryP "PasswordRepository" ^
/UpdateDBCfg
echo Время окончания операции: %TIME%
pause
Разберем подробнее ключевые параметры запуска, использованные в этом скрипте:
/ConfigurationRepositoryBindCfg — специальный ключ запуска, инициирующий принудительное связывание текущей информационной базы с указанным хранилищем.-forceBindAlreadyBindedUser — параметр указывает платформе выполнить привязку даже в том случае, если данный пользователь хранилища уже связан с другой информационной базой (например, с вашей рабочей базой). Это критически важно для работы в тестовых средах.-forceReplaceCfg — если конфигурация восстанавливаемой базы не пуста, этот флаг подтверждает полную замену метаданных конфигурацией, полученной напрямую из хранилища./DisableStartupDialogs — важнейший ключ, предотвращающий появление стартовых диалогов авторизации, выбора интерфейса и предупреждений системы безопасности. Именно он позволяет скрипту выполниться в фоновом режиме "без рук".^ (каретка) в синтаксисе пакетных файлов Windows используется для переноса одной длинной строки на следующую. Важный нюанс: сразу после символа ^ не должно быть пробелов, иначе интерпретатор CMD выдаст ошибку синтаксиса, и команда не выполнится.Если хранилище конфигурации эксплуатируется много лет, его объем может вырасти до гигантских размеров (3 ГБ и более). Платформа хранит историю абсолютно всех изменений каждого реквизита и модуля. Из-за этого при первичном связывании метаданных система вынуждена сопоставлять огромные массивы исторических данных.
Если скорость работы стала критически низкой, проанализируем возможность свертки хранилища: