Часто администраторы систем 1С сталкиваются с ситуацией, когда физический размер базы данных на диске стремительно растет, несмотря на отсутствие явных больших объектов или присоединенных файлов. Рассмотрим, как проанализировать такую ситуацию и какие шаги предпринять для освобождения места в СУБД PostgreSQL.
Прежде чем приступать к очистке, необходимо понять, какая именно часть данных занимает основной объем. В PostgreSQL для получения данных о размере таблиц мы можем использовать системные представления.
Рассмотрим, как получить список таблиц, отсортированный по количеству занимаемых страниц. Это поможет выявить «тяжеловесные» таблицы, требующие внимания. Выполним следующий SQL-запрос в консоли управления базой (например, pgAdmin):
SELECT relname, relpages
FROM pg_class
ORDER BY relpages DESC;
Анализируя результат выполнения этого запроса, мы увидим список объектов. Если вы обнаружите, что таблицы, которые не должны быть большими, занимают гигабайты пространства, это первый признак того, что в базе накопились «мертвые» строки (bloat), которые не были корректно удалены процессами очистки.
В PostgreSQL действует механизм MVCC (Multi-Version Concurrency Control). Когда данные обновляются или удаляются, старые версии записей не исчезают мгновенно. Они помечаются как «мертвые» и остаются в файлах данных до тех пор, пока процесс VACUUM не выполнит их физическую очистку. Если этот процесс настроен некорректно, пространство внутри файлов БД раздувается, хотя сами данные могли быть удалены через 1С.
Одним из самых надежных способов «пересобрать» структуру базы и гарантированно избавиться от накопившегося мусора является полная выгрузка базы в файл .dt и последующая загрузка в новую чистую информационную базу.
Этот процесс работает следующим образом:
.dt через Конфигуратор..dt в новую базу.В процессе загрузки платформа 1С создает структуру таблиц «с нуля», перенося только актуальные данные. Все накопленные «пустоты» и фрагментированные индексы останутся в старой базе, а новая база будет иметь минимально возможный размер. Это наиболее эффективный метод, если база долгое время не обслуживалась должным образом.
Чтобы проблема не вернулась снова, важно настроить параметры Autovacuum. В настройках сервера PostgreSQL необходимо обратить внимание на следующие параметры:
autovacuum_vacuum_scale_factor — снижение этого коэффициента заставит систему запускать процесс очистки при меньшем проценте изменений в таблице.autovacuum_vacuum_cost_limit — регулирует интенсивность работы процесса очистки, чтобы он не оказывал критического влияния на производительность пользователей.Также не забывайте выполнять REINDEX для индексов, которые часто обновляются. В PostgreSQL раздувание индексов — распространенная проблема, и регулярное перестроение позволяет существенно сэкономить дисковое пространство.
Заключение: Регулярный мониторинг размеров таблиц и правильная настройка фоновых процессов обслуживания базы данных позволят вам избежать «аномального» роста размера БД и сохранить высокую производительность системы 1С.