Администрирование · 10 мин
Как узнать размер базы 1С на PostgreSQL
Как узнать размер базы 1С на PostgreSQL: запросы pg_database_size и pg_total_relation_size, размер таблиц и индексов, контроль роста и типичные ошибки администраторов.
Контроль размера базы данных — базовая задача администратора 1С, работающего с PostgreSQL. Быстрый рост объёма указывает на накопление версий объектов, журналов регистрации, служебных таблиц или ошибок обмена, а вовремя замеченная проблема позволяет избежать переполнения диска и остановки работы пользователей.
PostgreSQL хранит всю нужную информацию во встроенных системных функциях и представлениях, поэтому никаких сторонних утилит для оценки объёма не требуется. Достаточно доступа к серверу через psql, pgAdmin или любой другой SQL-клиент и учётной записи с правами на чтение системного каталога.
Важно понимать, что «размер базы» — неоднозначная величина. Можно смотреть общий объём базы целиком, размер отдельных таблиц, объём индексов или размер служебных файлов WAL. Каждая метрика отвечает на свой вопрос: от «хватит ли места на диске» до «какая таблица раздулась после обмена».
Как проверить общий размер базы одним запросом
Самый быстрый способ — функция pg_database_size(). Подключитесь к серверу через psql или откройте Query Tool в pgAdmin и выполните запрос, подставив имя базы 1С:
SELECT pg_size_pretty(pg_database_size('my_base'));
Функция pg_database_size() возвращает объём в байтах, а обёртка pg_size_pretty() переводит его в читаемый вид — мегабайты или гигабайты. Без неё получить большое число в байтах, которое неудобно воспринимать.
SELECT datname, pg_size_pretty(pg_database_size(datname)) AS size FROM pg_database WHERE datistemplate = false ORDER BY pg_database_size(datname) DESC;Если на сервере несколько баз 1С, удобно вывести размеры всех сразу и отсортировать по убыванию — запрос выше делает именно это. Так вы сразу увидите, какая база занимает больше всего места, и сможете расставить приоритеты обслуживания.
Учтите: pg_database_size() считает данные и индексы самой базы, но не включает файлы журнала предзаписи (WAL) и временные файлы. Они лежат в общем каталоге кластера и могут занимать существенный объём при проблемах с архивацией или репликацией.
Как определить размер отдельных таблиц 1С
Общий объём базы мало говорит о причинах роста. Чтобы понять, какие таблицы занимают место, используйте функции pg_total_relation_size() (таблица плюс индексы и TOAST-данные) и pg_relation_size() (только данные таблицы).
SELECT relname,
pg_size_pretty(pg_total_relation_size(c.oid)) AS total_size
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'r' AND n.nspname = 'public'
ORDER BY pg_total_relation_size(c.oid) DESC
LIMIT 20;
Запрос выведет двадцать самых тяжёлых таблиц. В базе 1С имена таблиц формируются по служебным правилам: например, _document123 — таблица документа, _accumrg... — регистр накопления, _inforg... — регистр сведений. Сопоставить номер с конкретным объектом метаданных можно через структуру базы данных, которую показывает конфигуратор (в режиме толстого клиента) или внешние обработки сопоставления имён.
Отдельно посмотрите размер индексов — они нередко занимают заметную долю базы, особенно после массовых загрузок данных. Для этого замените в запросе условие c.relkind = 'r' на c.relkind = 'i' и функцию на pg_relation_size().
Как посмотреть размер через pgAdmin без SQL
Если работать с командной строкой неудобно, тот же результат доступен в графическом интерфейсе pgAdmin. Разверните дерево сервера, выберите базу данных и откройте вкладку Statistics или Dashboard — там отображается размер базы.
Для таблиц: раскройте узел Schemas → public → Tables, выберите таблицу и откройте её свойства. На вкладке Statistics виден размер таблицы, размер индексов и примерное количество строк. Это удобно для точечной проверки, но для анализа десятков таблиц быстрее работает SQL-запрос с сортировкой.
- 1Подключитесь к серверу PostgreSQL под учётной записью с правами чтения.
- 2Выберите нужную базу в дереве объектов и откройте вкладку Statistics.
- 3Для детализации раскройте Schemas → public → Tables и проверьте размеры крупных таблиц.
- 4Сравните объём данных с объёмом индексов, чтобы понять структуру занятого места.
- 5Зафиксируйте текущие значения, чтобы отслеживать динамику роста.
Как проверить размер на уровне файлов и каталогов
Иногда нужно понять, сколько места кластер PostgreSQL занимает на диске целиком, включая WAL и временные файлы. Каталог данных кластера обычно находится по пути вроде /var/lib/postgresql/15/main в Linux или в каталоге, указанном при установке в Windows. Точное расположение показывает запрос:
SHOW data_directory;
Размер каталога проверяется штатными средствами ОС: du -sh /var/lib/postgresql/15/main в Linux или свойствами папки в Windows. Подкаталог base содержит файлы самих баз, pg_wal — журналы предзаписи.
Если pg_wal разросся, проверьте настройки архивации WAL и слотов репликации: неработающая реплика или сломанный архивный процесс заставляют сервер копить журналы бесконечно. Это частая причина переполнения диска при внешне нормальном размере самой базы.
Почему база растёт и как отслеживать динамику
Типичные причины роста базы 1С на PostgreSQL: журнал регистрации с подробным уровнем, хранение версий объектов, большие вложения в справочниках и документах, регистры сведений с историей обменов, а также «раздувание» таблиц из-за особенностей MVCC — старые версии строк остаются в файлах до выполнения VACUUM.
Как выбрать действие
Для отслеживания динамики достаточно раз в неделю сохранять результат запроса pg_database_size() в файл или таблицу мониторинга. Резкий скачок роста после обмена или обновления — сигнал проверить, что именно записалось в базу.
Как проверить результат и убедиться в корректности данных
После замеров полезно сверить несколько источников: размер по pg_database_size(), сумму размеров таблиц и объём каталога base/<OID базы> на диске. Эти значения должны быть сопоставимы, с поправкой на служебные файлы.
OID базы для проверки каталога возвращает запрос SELECT oid, datname FROM pg_database;. Если сумма по таблицам сильно меньше размера базы, разница обычно уходит на индексы, TOAST и системный каталог — это нормально.
Как проверить результат
Значения близки, разница объясняется служебными файлами
Каталог на диске в разы больше — проверьте WAL и временные файлы
Плавный рост, соответствующий объёму вводимых документов
Резкий скачок без причины — ищите источник в обменах и журнале регистрации
Индексы занимают умеренную долю от таблицы
Индексы сопоставимы с данными или больше — нужен REINDEX и анализ необходимости индексов
Что важно запомнить
Общий размер базы 1С показывает pg_database_size, детализацию по таблицам — pg_total_relation_size, а полную картину на диске — каталог данных кластера. Файлы внутри каталога PostgreSQL не трогают вручную, а рост базы контролируют регулярными замерами и обслуживанием через VACUUM и REINDEX.
Частые вопросы
Можно ли узнать размер базы 1С из конфигуратора?
Нет, конфигуратор не показывает физический размер базы на СУБД. Он оперирует метаданными и структурой. Реальный объём смотрят средствами PostgreSQL: SQL-запросами, pgAdmin или на уровне файловой системы сервера.
Почему размер выгрузки .dt сильно меньше размера базы в PostgreSQL?
Файл выгрузки 1С сжат и не содержит индексов в том виде, в каком они хранятся в СУБД, а также служебные структуры PostgreSQL. Поэтому размер .dt нельзя использовать для оценки места на диске сервера — ориентируйтесь на pg_database_size.
Что делать, если база быстро растёт без видимой причины?
Сначала найдите самые тяжёлые таблицы запросом по pg_total_relation_size. Часто виновниками оказываются журнал регистрации, регистры сведений с историей обменов или таблицы вложений. Параллельно проверьте pg_wal и слоты репликации — они растут незаметно для SQL-замеров самой базы.
Нужны ли права суперпользователя для запросов размера?
Для pg_database_size по своей базе достаточно права подключения к ней. Для просмотра размеров всех баз и чтения системной статистики по чужим объектам могут потребоваться расширенные права, например роль pg_read_all_stats. Учётная запись postgres имеет все необходимые права по умолчанию.
Как уменьшить размер базы после удаления данных из 1С?
Удаление записей в 1С не возвращает место операционной системе сразу: PostgreSQL помечает строки как неактивные. Выполните VACUUM ANALYZE для повторного использования места внутри таблиц. Физически сжать файлы помогает VACUUM FULL, но он блокирует таблицу и требует свободного места — проводите его только в нерабочее время после резервной копии.