Почему тормозит большая файловая база 1С и что делать с ошибкой превышения размера таблицы?

Системный администратор 1С v8.3 (Управляемые формы) Промышленность, строительство и АПК
← На главную

Многие администраторы и разработчики сталкиваются с ситуацией, когда файловая база данных 1С (формат .1CD) начинает работать недопустимо медленно: долгий запуск, зависание регламентных заданий, общая "задумчивость" интерфейса. Часто при этом общий размер файла базы данных достигает внушительных размеров (10–20 Гб и более). Давайте разберем эту проблему подробно, проанализируем структуру файла .1CD, выясним природу ограничений платформы и составим пошаговый план решения.

Симптомы и первичная диагностика

Рассмотрим типичную ситуацию: есть отраслевая конфигурация (например, "Управление ветеринарными сертификатами" или любая другая, активно работающая с внешними системами). Размер файла базы данных составляет около 13 Гб. Пользователи жалуются на долгий вход в систему и зависания.

Первое, что мы обычно делаем — это стандартные процедуры обслуживания:

  1. Чистка кэша пользователей и сервера.
  2. Удаление старых логов (Журнала регистрации).
  3. Выгрузка в .dt и обратная загрузка.

Однако часто это не помогает или помогает незначительно. Чтобы понять истинную причину, нам необходимо заглянуть "внутрь" файла базы данных. Для этого мы используем специализированные инструменты, такие как утилита Tool_1CD или обработка для анализа размера таблиц базы данных, которая позволяет оценить объем данных по метаданным и выбрать стратегию уменьшения базы.

При анализе данных Tool_1CD важно правильно интерпретировать числа. Размер в утилите указывается в байтах. Если мы видим таблицу размером, например, 6 442 450 944, это означает, что таблица занимает около 6 Гб.

Ограничения файловой базы данных 1С

Мы должены четко понимать архитектурные ограничения файлового варианта работы 1С:Предприятие 8. Файловая база — это единый файл-контейнер, внутри которого хранятся таблицы (справочники, документы, регистры). У этого формата есть жесткие лимиты на размер одной внутренней таблицы.

Давайте разберем эволюцию этих ограничений:

Однако, здесь есть важный нюанс. Даже если мы используем новый формат с размером страницы 8 Кб (стандарт для 8.3.8+), платформа 1С на программном уровне ограничивает размер одной таблицы величиной в 6 Гб.

Важно: Утилита Tool_1CD может показывать "Максимальный размер" для таблицы, например, 32 Гб. Это теоретический предел формата файла при текущем размере страницы. Но движок 1С не позволит таблице вырасти до этого размера в файловом режиме. Как только размер файла данных одной таблицы (обычно это файлы с расширением .dat внутри контейнера) приблизится к 6 Гб, работа с базой станет нестабильной или невозможной.

Поиск виновника: анализ больших таблиц

Если ваша база тормозит или вылетает, посмотрите в Tool_1CD на колонку "Размер" (Length) и отсортируйте по убыванию. Обычно мы видим таблицы с именами вида _InfoRgXXXX или _DocumentXXXX.

В рассматриваемом примере мы обнаружили таблицы:

Префикс _InfoRg означает Регистр сведений (Information Register). Тот факт, что одна таблица занимает 6 Гб, является критическим сигналом. Мы подошли к "потолку" возможностей файловой версии.

Причины "раздувания" базы

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

1. Логирование обменов (Меркурий, Честный знак, ЕГАИС)

В отраслевых решениях (например, для ветеринарии) часто реализована интеграция с государственными системами (ВетИС/Меркурий). Обмен происходит посредством XML-пакетов. Разработчики часто сохраняют полные тексты запросов и ответов в регистры сведений для отладки.

Если в регистр записывается XML-строка в реквизит неограниченной длины, и таких записей миллионы, размер таблицы растет лавинообразно. Это архитектурная ошибка или недосмотр настройки ("включено полное логирование").

2. Версионирование объектов

Механизм "История изменений" (версионирование) сохраняет копию объекта при каждой записи. Если настроить версионирование для всех документов и справочников и не делать очистку, регистр сведений версий станет самым большим в базе.

3. Присоединенные файлы

Хранение сканов, сертификатов и картинок непосредственно в базе данных (в реквизитах типа ХранилищеЗначения) быстро увеличивает размер таблиц. Хотя для файлов обычно используются отдельные таблицы, они влияют на общий размер .1CD и скорость работы дисковой подсистемы.

Комплексное решение проблемы

Если мы обнаружили проблему, давайте перейдем к её решению. Действовать нужно последовательно.

Шаг 1. Идентификация данных

Используя Tool_1CD, мы узнали имя таблицы (например, _InfoRg1234). Нам нужно понять, какому объекту метаданных она соответствует в 1С. Для этого можно воспользоваться функцией "Получить структуру хранения базы данных".

В режиме "1С:Предприятие" (или через внешнюю обработку) выполним код:


Сообщить(ПолучитьСтруктуруХраненияБазыДанных("РегистрСведений.ИмяВашегоРегистра", Истина));

Либо можно воспользоваться обработкой Структура хранения базы данных, которая делает работу с этой функцией значительно удобнее и нагляднее. Так мы точно узнаем, что таблица-гигант — это, например, "Журнал запросов ВетИС".

Шаг 2. Очистка данных

Просто удалить записи недостаточно, но это первый шаг. Нам нужно удалить старые и ненужные данные.

Пример алгоритма очистки периодического регистра:


Набор = РегистрыСведений.ЛогиОбмена.СоздатьНаборЗаписей();
// Устанавливаем отбор по период, если нужно, или просто удаляем порциями
Набор.Записать(); // Запись пустого набора удаляет записи

Шаг 3. Сжатие базы данных (Shrink)

Это критически важный момент. В файловой базе 1С при удалении данных (Delete) физическое место на диске не освобождается. Страницы помечаются как свободные, но файл .1CD не уменьшается.

Чтобы реально уменьшить размер файла и отодвинуть лимит в 6 Гб, необходимо выполнить Сжатие таблиц.

  1. Запустице Конфигуратор.
  2. Меню Администрирование -> Тестирование и исправление...
  3. Установите галочку Сжатие таблиц информационной базы. Остальные галочки можно снять, если проверка логической целостности сейчас не требуется (хотя рекомендуется).
  4. Нажмите "Выполнить".

Только после этой операции размер файла на диске уменьшится, а внутренняя таблица перестанет упираться в лимит 6 Гб.

Шаг 4. Вынос файлов в тома

Если база большая из-за картинок и вложений:

  1. Зайдите в раздел "Работа с файлами" (в большинстве типовых конфигураций).
  2. Настройте Тома хранения файлов (папка на диске сервера).
  3. Используйте штатную обработку "Перенос файлов в тома".
  4. После переноса обязательно выполните Сжатие таблиц (Шаг 3), чтобы освободить место в базе.

Шаг 5. Работа с размером страницы (cnvdbfl)

Если очистка невозможна, можно попытаться выиграть немного времени, изменив размер страницы базы данных. В папке bin установки платформы есть утилита cnvdbfl.exe.

Команда для изменения размера страницы на 16 Кб (запускать в командной строке):

"C:\Program Files\1cv8\8.3.XX.XXXX\bin\cnvdbfl.exe" -c -p 16k "C:\Base\1Cv8.1CD"

Это может немного повысить производительность на больших объемах, но не решит проблему лимита в 6 Гб кардинально.

Радикальное решение: Переход на Клиент-Сервер

Если после всех чисток размер одной таблицы всё равно приближается к 5–6 Гб, и данные удалять нельзя — это однозначный сигнал к смене архитектуры.

Файловая база данных не предназначена для хранения таблиц такого объема. Вам необходимо переходить на клиент-серверный вариант (SQL). Это может быть:

В SQL-версии ограничения на размер таблицы определяются только возможностями СУБД, которые на порядки превышают лимиты файловой 1С.

Выводы

Проблема долгого запуска и зависаний в вашем случае вызвана достижением технологического предела файловой базы данных. Таблица размером 6 Гб — это "красная зона".

Ваш план действий:

  1. Выясните, что за регистр занимает 6 Гб (скорее всего, логи обмена).
  2. Очистите его (оставьте данные за последний месяц-два).
  3. Сделайте ТИИ со сжатием таблиц.
  4. Запланируйте переход на SQL, так как бизнес-логика вашей программы генерирует большие объемы данных, с которыми файловый движок справляется с трудом.
← На главную