При активной многолетней эксплуатации конфигураций 1С (например, «Управление торговлей 10.3») объем базы данных неизбежно увеличивается. Когда рабочая база переносится с сервера на локальные компьютеры разработчиков для отладки или тестирования, специалисты часто сталкиваются с невозможностью загрузить выгрузку .dt, падением процесса по нехватке памяти или ошибками структуры файла 1CD. Проанализируем причины возникновения таких ограничений и разберем по шагам практические способы восстановления работоспособности базы.
Выясним причину, почему файл выгрузки размером 1,6 ГБ успешно разворачивается на одних компьютерах и аварийно завершает работу на других:
.dt платформа создает временные структуры в оперативной памяти и выполняет расчет индексов. Если объем отдельной таблицы или ее индексных файлов превышает лимит выделенной памяти, процесс 32-битного клиента или конфигуратора аварийно закрывается. В 64-разрядной версии платформы такое ограничение отсутствует, поэтому процесс загрузки проходит успешно.%TEMP% для распаковки промежуточных таблиц. Если системный диск переполнен, операция загрузки прерывается ошибками ввода-вывода.Внутренняя структура базы 1С разделяет данные регистров накопления на две основные таблицы:
ACCUMRG... — таблица непосредственных движений регистра (записи прихода и расхода).ACCUMRGT... — таблица агрегированных итогов и остатков, рассчитанных по периодам (обычно помесячно).Если таблица движений может занимать относительно небольшой объем, то таблица итогов ACCUMRGT способна разрастаться до десятков гигабайт. Разберем основные причины этого явления:
РегистрНакопления.НДСРасчетыСПокупателями) приходные и расходные движения не совпадают по субконто или измерениям (разные договоры, расчетные документы, ставки НДС), остаток математически может быть нулевым, но в разрезе аналитики формируются миллионы встречных положительных и отрицательных записей. Каждая такая пара переносится в таблицу итогов на каждый последующий месяц.Для исправления ситуации выполним следующие действия:
Начиная с версии платформы 8.3.8, формат файловых баз 1CD поддерживает настраиваемый размер страниц данных: 4 КБ (по умолчанию), 8 КБ, 16 КБ, 32 КБ и 64 КБ. Увеличение размера страницы снимает историческое ограничение в 4 ГБ на одну внутреннюю таблицу базы данных и позволяет отдельной таблице вырастать до сотен гигабайт.
Рассмотрим по шагам, как изменить размер страницы существующей файловой базы с помощью консольной утилиты конвертации cnv83n.exe:
1Cv8.1CD.bin).
cnv83n.exe -s 64k "C:\Bases\Trade\1Cv8.1CD"
После завершения процесса база данных сможет беспрепятственно хранить таблицы размером более 4 ГБ в файловом режиме.
Важно помнить: удаление документов, строк регистров или очистка картинок стандартными средствами не уменьшают размер файла 1Cv8.1CD на диске. Платформа лишь помечает удаленные страницы как свободные для будущей записи. Чтобы физически уменьшить размер базы и перестроить ее структуру, выполним следующие шаги:
chdbfl.exe (находится в папке bin платформы 1С) и выполним диагностику файла 1Cv8.1CD с флагом исправления ошибок.При попытке свертки базы и стандартного удаления сотен тысяч документов типовой механизм поиска ссылочной целостности пытается загрузить все дерево связей в оперативную память, что приводит к аварийному завершению сеанса. Рассмотрим пример программного кода для пакетного удаления помеченных на удаление объектов порциями:
Выборка = Документы.РеализацияТоваровУслуг.Выбрать();
МассивКУдалению = Новый Массив;
Счетчик = 0;
Пока Выборка.Следующий() Цикл
Если Выборка.ПометкаУдаления Тогда
МассивКУдалению.Добавить(Выборка.Ссылка);
Счетчик = Счетчик + 1;
КонецЕсли;
Если Счетчик >= 500 Тогда
УдалитьОбъекты(МассивКУдалению, Ложь);
МассивКУдалению.Очистить();
Счетчик = 0;
КонецЕсли;
КонецЦикла;
Если МассивКУдалению.Количество() > 0 Тогда
УдалитьОбъекты(МассивКУдалению, Ложь);
КонецЕсли;
Перед проведением массовой очистки рекомендуется временно отключить регламентные задания и автоматический пересчет итогов, выполнив его однократно после завершения удаления.
Если размер информационной базы превышает 20–30 ГБ, эксплуатация в файловом варианте даже для целей разработки становится неэффективной из-за накладных расходов на дисковые блокировки и времени расчета итогов. Оптимальным решением является развертывание на компьютере разработчика локального экземпляра СУБД (PostgreSQL или MS SQL Server Express) и сервера 1С (например, лицензии «Сервер МИНИ» на 5 подключений). Это полностью исключает специфичные ограничения формата 1CD и проблемы с нехваткой памяти при загрузке дампов.