При обновлении конфигураций 1С (особенно таких ресурсоемких, как «1С:Документооборот») в файловом режиме нередко возникает критическая ошибка «Недостаточно памяти». Ситуация часто ставит в тупик, когда на сервере или рабочей станции установлено достаточное количество оперативной памяти, свободного места на жестком диске с избытком, а системный кэш и временные файлы предварительно очищены. Разберем детально, почему возникает данная ошибка, как проанализировать внутреннюю структуру файла базы данных 1Cv8.1CD и какими способами можно успешно выполнить обновление.
Проанализируем ключевые технические причины, которые приводят к сбою:
32-разрядный процесс Конфигуратора. По умолчанию запуск 32-битного клиента платформы 1cv8.exe жестко ограничен адресным пространством процесса в 2–3 ГБ. При масштабной реструктуризации метаданных и сопоставлении объектов этот лимит моментально исчерпывается независимо от общего объема физической оперативной памяти.
Ограничение файловой СУБД 1С на размер одной таблицы. В файловом формате со стандартным размером страницы (4 Кб) максимальный размер любой внутренней таблицы базы данных не может превышать 4 ГБ. Если в процессе реструктуризации таблица превышает этот порог, процесс аварийно завершается.
Хранение файлов и версий объектов внутри базы. В конфигурации «1С:Документооборот» хранение бинарных файлов (сканов, документов) непосредственно в таблицах базы, а также активное ведение истории версий приводят к разрастанию таблиц до десятков гигабайт.
Способ 1. Анализ распределения дискового пространства внутри файла базы
Прежде чем приступать к оптимизации, выясним, какие именно объекты конфигурации занимают основной объем файла 1Cv8.1CD. Для этого используем специализированные инструменты анализа файловых баз:
Используем специализированные утилиты для анализа структуры файла базы данных (например, утилиту Tools_1cd), которые позволяют открыть файл без запуска платформы и увидеть точный физический размер каждой таблицы и ее индексов.
Применяем специализированные внешние обработки для анализа размера таблиц файловой базы. Они считывают служебные метаданные и показывают, какие именно регистры и справочники занимают больше всего места.
Обращаем пристальное внимание на следующие структуры: регистр сведений ВерсииОбъектов, таблицы хранения прикрепленных файлов (например, справочники файлов и присоединенных файлов) и журнал регистрации.
Способ 2. Очистка версий объектов и перенос файлов в тома
Если анализ показал сильное разрастание регистров хранения истории или бинарных данных, выполним предварительную оптимизацию информационной базы:
Очистка версионирования. В разделе администрирования открываем настройку хранения версий объектов и удаляем устаревшие версии за прошлые периоды. Для некритичных справочников и документов отключаем версионирование или настраиваем срок автоматической очистки.
Вынос файлов на диск. Переводим хранение файлов из таблиц базы в тома на сервере. В разделе администрирования настраиваем «Тома хранения файлов» в файловой системе и запускаем обработку по переносу уже сохраненных файлов из базы данных в созданные каталоги. Это может уменьшить размер файла 1Cv8.1CD в несколько раз.
Сжатие таблиц. После очистки данных выполняем тестирование и исправление информационной базы в Конфигураторе (меню Администрирование → Тестирование и исправление...) с обязательной установкой флага Сжатие таблиц информационной базы. Также можно воспользоваться утилитой проверки chdbfl.exe из каталога платформы.
Способ 3. Запуск Конфигуратора в 64-разрядном режиме
Для снятия ограничений по используемой виртуальной памяти процесса перейдем на 64-разрядный клиент платформы:
Убеждаемся, что на компьютере установлена 64-битная версия платформы «1С:Предприятие 8.3».
Запускаем исполняемый файл 1cv8.exe строго из каталога C:\Program Files\1cv8\8.3.X.XXXX\bin\ (не из папки Program Files (x86)).
Повторяем процедуру обновления конфигурации. 64-разрядный процесс сможет адресовать весь доступный объем оперативной памяти, что исключит падение Конфигуратора по нехватке памяти процесса.
Способ 4. Изменение размера страницы базы через cnvdbfl.exe
Если размер отдельных таблиц приближается к 4 ГБ, а перевод на клиент-серверный вариант не планируется в ближайшее время, снимем ограничение путем увеличения размера страницы базы данных:
Создаем полную резервную копию файла 1Cv8.1CD.
Закрываем все клиентские сеансы и службу Конфигуратора.
Запускаем утилиту cnvdbfl.exe, расположенную в папке bin установленной платформы 1С.
Выбираем файл базы данных и устанавливаем новый размер страницы (например, 8 Кб, 16 Кб, 32 Кб или 64 Кб).
Выполняем конвертацию. Увеличение страницы базы до 64 Кб кратно увеличивает максимальный поддерживаемый размер отдельных таблиц и предотвращает сбои реструктуризации.
Способ 5. Обновление через временную клиент-серверную базу (СУБД)
Для гарантированного обновления баз размером более 10 ГБ наилучшим техническим решением является выполнение процедуры в среде СУБД:
Выполняем выгрузку информационной базы в файл .dt через меню Администрирование → Выгрузить информационную базу....
Создаем временную информационную базу на сервере СУБД (PostgreSQL или Microsoft SQL Server).
Загружаем файл выгрузки в серверную базу.
Выполняем обновление конфигурации и обновление конфигурации базы данных. В среде СУБД отсутствуют файловые ограничения на размер таблиц и поддерживается эффективное управление памятью.
После успешного обновления и проведения реструктуризации делаем обратную выгрузку в .dt и загружаем ее в чистую файловую базу.
Способ 6. Пакетное обновление из командной строки
Интерфейс сравнения и объединения конфигураций потребляет значительное количество ресурсов. Для экономии памяти выполним обновление в пакетном режиме с помощью пакетных параметров запуска Конфигуратора:
Пакетный запуск без графической оболочки существенно снижает нагрузку на подсистему памяти и позволяет завершить реструктуризацию данных даже в условиях ограниченных ресурсов.