Как уменьшить размер базы 1С:Управление торговлей на PostgreSQL после массовых обновлений

Системный администратор 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При выполнении длительной серии обновлений (например, переход через 20–25 релизов подряд) администраторы часто сталкиваются с тем, что база данных 1С:Управление торговлей (УТ 11) начинает стремительно расти в объеме. В некоторых случаях база может увеличиться с 500 МБ до 7 ГБ и более. Это происходит из-за особенностей работы СУБД PostgreSQL, механизмов хранения конфигураций в 1С и накопления технических данных в процессе выполнения обработчиков обновления.

В данной статье мы подробно разберем, почему это происходит, и проанализируем шаги, которые помогут вернуть базе адекватный размер и стабильную производительность.

Причины разрастания базы данных

Прежде чем переходить к активным действиям, выясним причину «опухания» базы. Основных факторов три:

  1. Особенности PostgreSQL (MVCC): При обновлении данных старые версии строк не удаляются физически, а помечаются как «мертвые». Если в процессе обновления конфигурации или данных (через обработчики) происходит много изменений, таблицы наполняются этими неиспользуемыми данными (bloat).
  2. Конфигурация поставщика: Каждое обновление через «Поддержку» может оставлять след в системных таблицах Config и ConfigSave. При многократных итерациях объем метаданных может увеличиться в разы.
  3. Технические данные 1С: В процессе обновления записываются логи, замеры времени, версии объектов и временные данные для миграции, которые не всегда очищаются автоматически.

Шаг 1: Обслуживание на уровне PostgreSQL (Vacuum)

Первое, что мы должны рассмотреть — это регламентные процедуры самой СУБД. Если база сильно разрослась, стандартный autovacuum может не справляться. Проанализируем ситуацию: нам необходимо физически высвободить место на диске.

Рассмотрим выполнение полной очистки через pgAdmin или консоль запросов. Самым эффективным, но «тяжелым» методом является выполнение команды VACUUM FULL. Обратите внимание, что эта операция полностью блокирует таблицы, поэтому ее нужно выполнять в период отсутствия пользователей.

Последовательность действий в pgAdmin:

  1. Выделите нужную базу данных.
  2. Нажмите правую кнопку мыши и выберите пункт Maintenance.
  3. Выберите режим Vacuum, установите флажок Full и Analyze.

Эта команда пересоздаст файлы таблиц без «пустот». Также крайне рекомендуется выполнить REINDEX DATABASE, так как индексы при массовых обновлениях раздуваются не меньше, чем сами данные.

Шаг 2: Использование механизмов 1С (Тестирование и исправление)

Если манипуляции с PostgreSQL не дали радикального уменьшения размера (или если база была временно переведена в файловый вариант для тестов), воспользуемся встроенными средствами платформы 1С.

Проанализируем работу функции Тестирование и исправление (ТиИ). Для наших целей критически важна опция «Сжатие таблиц информационной базы». Рассмотрим алгоритм действий:

  1. Запустите 1С в режиме Конфигуратор.
  2. Перейдите в меню Администрирование — Тестирование и исправление.
  3. Установите флаг только на пункте «Сжатие таблиц информационной базы».
  4. Нажмите «Выполнить».

Как показывает практика, выполнение ТиИ на файловой копии базы может сократить размер файла 1Cv8.1CD в несколько раз (например, с 6.5 ГБ до 2 ГБ), после чего чистую базу можно загрузить обратно на сервер.

Шаг 3: Пересоздание базы через выгрузку в DT

Рассмотрим метод, который многие специалисты считают «золотым стандартом» очистки от мусора. Выгрузка в файл .dt и последующая загрузка в новую чистую базу данных на PostgreSQL позволяет полностью перестроить структуру таблиц и индексов на уровне СУБД.

Важно: Всегда делайте резервную копию перед этой процедурой!

Разберем последовательность действий:

  1. Выгрузите информационную базу в файл .dt через Конфигуратор.
  2. Создайте новую пустую базу данных на сервере PostgreSQL (желательно с корректными настройками lc_collate и lc_ctype).
  3. Добавьте эту пустую базу в список информационных баз 1С.
  4. Загрузите ранее созданный файл .dt в новую базу.

Этот метод эффективно удаляет системный мусор и оптимизирует хранение данных, так как платформа при загрузке создает таблицы «с нуля».

Шаг 4: Очистка конфигурации поставщика

Ситуация, когда конфигурация базы данных весит аномально много, часто связана с избыточными данными в конфигурации поставщика. Проанализируем состояние через меню Конфигурация — Поддержка — Настройка поддержки. Если вы видите, что база «пухнет» именно из-за метаданных, можно попробовать следующий прием:

  1. Снимите конфигурацию с поддержки (предварительно убедившись, что у вас есть файл .cf актуального релиза).
  2. Выполните сохранение конфигурации и выгрузку в .dt.
  3. Загрузите обратно и снова поставьте на поддержку через «Сравнение/объединение» с чистым файлом конфигурации поставщика.

Это удаляет историю изменений внутри системных таблиц 1С, которая могла накопиться за 25 этапов обновления.

Шаг 5: Анализ прикладных данных (Регистры)

Выясним причину роста в самой конфигурации УТ 11. Часто после обновлений остаются заполненными технические регистры. Рассмотрим, на что стоит обратить внимание в первую очередь:

Борьба с ошибкой ucrtbase.dll

Если в процессе работы с разросшейся базой клиенты начинают вылетать с ошибкой в модуле ucrtbase.dll, это часто сигнализирует о нехватке памяти или проблемах с кэшем. Выполним следующие действия:

  1. Очистите серверный кэш (папки snccntxt в каталоге службы сервера 1С).
  2. Очистите локальный кэш пользователя.
  3. Убедитесь, что версия платформы 1С (в вашем случае 8.3.13.1690) соответствует требованиям используемой версии PostgreSQL. Возможно, потребуется обновление платформы до более стабильной (например, актуальной ветки 8.3.22 или выше), так как старые релизы имеют утечки памяти при работе с большими объемами данных.

Подводя итог, можно сказать, что наиболее эффективным комплексом мер является выгрузка/загрузка через DT в сочетании с последующей настройкой регулярного VACUUM ANALYZE в PostgreSQL. Это не только уменьшит размер базы, но и значительно ускорит работу пользователей.

← На главную