Как уменьшить размер аномально большой базы данных 1С на PostgreSQL?

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

Часто администраторы систем 1С сталкиваются с ситуацией, когда физический размер базы данных на диске стремительно растет, несмотря на отсутствие явных больших объектов или присоединенных файлов. Рассмотрим, как проанализировать такую ситуацию и какие шаги предпринять для освобождения места в СУБД PostgreSQL.

Этап 1: Диагностика размера таблиц

Прежде чем приступать к очистке, необходимо понять, какая именно часть данных занимает основной объем. В PostgreSQL для получения данных о размере таблиц мы можем использовать системные представления.

Рассмотрим, как получить список таблиц, отсортированный по количеству занимаемых страниц. Это поможет выявить «тяжеловесные» таблицы, требующие внимания. Выполним следующий SQL-запрос в консоли управления базой (например, pgAdmin):


SELECT relname, relpages 
FROM pg_class 
ORDER BY relpages DESC;

Анализируя результат выполнения этого запроса, мы увидим список объектов. Если вы обнаружите, что таблицы, которые не должны быть большими, занимают гигабайты пространства, это первый признак того, что в базе накопились «мертвые» строки (bloat), которые не были корректно удалены процессами очистки.

Этап 2: Понимание причин роста базы (MVCC и Bloat)

В PostgreSQL действует механизм MVCC (Multi-Version Concurrency Control). Когда данные обновляются или удаляются, старые версии записей не исчезают мгновенно. Они помечаются как «мертвые» и остаются в файлах данных до тех пор, пока процесс VACUUM не выполнит их физическую очистку. Если этот процесс настроен некорректно, пространство внутри файлов БД раздувается, хотя сами данные могли быть удалены через 1С.

Этап 3: Метод выгрузки и загрузки базы данных (.dt)

Одним из самых надежных способов «пересобрать» структуру базы и гарантированно избавиться от накопившегося мусора является полная выгрузка базы в файл .dt и последующая загрузка в новую чистую информационную базу.

Этот процесс работает следующим образом:

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

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

Этап 4: Настройка регламентных операций

Чтобы проблема не вернулась снова, важно настроить параметры Autovacuum. В настройках сервера PostgreSQL необходимо обратить внимание на следующие параметры:

Также не забывайте выполнять REINDEX для индексов, которые часто обновляются. В PostgreSQL раздувание индексов — распространенная проблема, и регулярное перестроение позволяет существенно сэкономить дисковое пространство.

Заключение: Регулярный мониторинг размеров таблиц и правильная настройка фоновых процессов обслуживания базы данных позволят вам избежать «аномального» роста размера БД и сохранить высокую производительность системы 1С.

← На главную