При длительной эксплуатации информационных баз 1С:Предприятие 7.7 наступает момент, когда размер отдельных таблиц базы данных начинает стремительно приближаться к критическим отметкам. Наиболее уязвимыми традиционно оказываются таблицы партионного учета и движений регистров, такие как ПартииТМЦ. Разберем технические причины возникновения этой проблемы, выясним, почему преодоление рубежа в 2 гигабайта приводит к полной остановке работы, и подробно рассмотрим практические пути выхода из аварийной ситуации.
В файловой версии платформы 1С:Предприятие 7.7 для управления данными используется движок CodeBase (библиотека dbfeng32.dll). Ограничение в 2 гигабайта обусловлено не файловой системой операционной системы (даже если база расположена на томе NTFS), а механизмами адресации и блокировки внутри самого движка базы данных.
Рассмотрим подробнее физику процесса:
lseek или SetFilePointer) используется знаковое 32-разрядное целое число (signed 32-bit integer). Максимальное положительное значение такого числа составляет ровно 2 147 483 647 байт (2 ГБ без одного байта). Как только файл превышает этот размер хотя бы на один байт, знаковый бит инвертируется, адрес становится отрицательным, и движок теряет способность считывать или записывать данные. База аварийно завершает работу с ошибками повреждения заголовка или невозможности чтения таблицы.0x40000000) зарезервирован под установку системных байтовых блокировок при многопользовательском сетевом доступе. Когда физический размер файла .DBF превышает 1 гигабайт, область хранения реальных записей накладывается на виртуальную область блокировок. В результате пользователи сталкиваются с ложными зависаниями сессий, взаимными блокировками при проведении документов и разрушением индексных файлов .CDX.Прежде чем приступать к операциям, необходимо точно определить, какой именно файл разросся. Для этого проанализируем файл словаря базы данных 1cv7.dd, сопоставив имена таблиц метаданных и физические имена файлов на диске. В регистрах остатков (например, партии товаров) учет разделен на два ключевых файла:
RG*.DBF), мы имеем дело с типичной ошибкой учета — зависшими остатками («хвостами»). Когда по партии количество списано в ноль, а сумма из-за погрешностей округления зависла (или наоборот), эта строка не аннулируется. При каждом ежемесячном переносе точки актуальности (ТА) незакрытые остатки многократно тиражируются на каждый следующий месяц, вызывая лавинообразное раздувание таблицы.Если база уже перестала открываться или находится в считанных килобайтах от фатального сбоя, действуем по следующему алгоритму:
*.CDX. При следующем монопольном входе 1С заново перестроит индексы. Это освободит память и поможет устранить ошибки, если лимит в 2 ГБ превысил индексный файл, а не сам DBF.0x2A), но продолжают физически занимать место. Штатная процедура Тестирование и исправление ИБ с флагом Сжатие таблиц информационной базы выполняет операцию PACK, полностью вычищая помеченные строки. Если зайти в 1С уже невозможно, можно воспользоваться специализированными утилитами для работы с базами xBase/FoxPro и выполнить упаковку проблемного файла напрямую.Операции - Управление итогами. Если сместить границу рассчитанных итогов назад ближе к точке актуальности или временно снять расчет итогов с перегруженного регистра, платформа очистит тяжелый файл RG*.DBF, что мгновенно вернет базу к жизни.Единственным долговременным решением в рамках файловой структуры остается свертка базы данных (удаление исторических периодов с формированием входящих остатков).
Разберем регламент выполнения свертки:
Если специфика бизнеса не позволяет удалять историю документов или проводить остановку базы на многочасовую свертку, оптимальным выходом является перевод информационной базы на Microsoft SQL Server.
Проанализируем преимущества и особенности этого шага:
BkEnd.dll для снятия ограничений проверки версии SQL-сервера либо использование внешних компонент и классов прямых запросов к базам данных.Таким образом, оставлять ситуацию с файлом размером более 1–2 ГБ без вмешательства нельзя: сбой записи гарантированно произойдет в ближайшее время. Сжатие таблиц и сдвиг расчета итогов позволят выиграть время, после чего следует запланировать грамотную свертку или перевод базы на SQL-сервер.