К статье
Практический материал

Администрирование · 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() переводит его в читаемый вид — мегабайты или гигабайты. Без неё получить большое число в байтах, которое неудобно воспринимать.

sql
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-запрос с сортировкой.

Порядок действий в pgAdmin
  1. 1
    Подключитесь к серверу PostgreSQL под учётной записью с правами чтения.
  2. 2
    Выберите нужную базу в дереве объектов и откройте вкладку Statistics.
  3. 3
    Для детализации раскройте Schemas → public → Tables и проверьте размеры крупных таблиц.
  4. 4
    Сравните объём данных с объёмом индексов, чтобы понять структуру занятого места.
  5. 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.

Маршрут решения

Как выбрать действие

База большая, но таблицы по размеру соответствуют объёму данныхРост естественный — планируйте расширение диска и контролируйте динамику еженедельно.
Таблица намного больше, чем ожидается по числу записейВероятно раздувание (bloat) — выполните VACUUM ANALYZE, при сильной фрагментации рассмотрите VACUUM FULL в нерабочее время.
Быстро растёт журнал регистрацииСократите журнал в конфигураторе или снизьте уровень регистрируемых событий.
Переполняется диск, а размер базы по SQL нормальныйПроверьте pg_wal, слоты репликации и архивацию WAL.

Для отслеживания динамики достаточно раз в неделю сохранять результат запроса pg_database_size() в файл или таблицу мониторинга. Резкий скачок роста после обмена или обновления — сигнал проверить, что именно записалось в базу.

Типичные ошибки
01
Судить о размере базы по размеру файла выгрузки .dump или .sql — выгрузка сжата и не включает индексы, реальный объём обычно заметно больше.
02
Искать файлы конкретной базы по имени — в каталоге base базы хранятся в подкаталогах с числовыми OID, а не с читаемыми именами.
03
Запускать VACUUM FULL в рабочее время — операция блокирует таблицу и останавливает работу пользователей 1С.
04
Игнорировать pg_wal при оценке занятого места — журналы могут занимать больше, чем сами данные.
05
Удалять таблицы 1С напрямую в PostgreSQL — структурой базы управляет платформа, ручное вмешательство разрушает целостность.

Как проверить результат и убедиться в корректности данных

После замеров полезно сверить несколько источников: размер по pg_database_size(), сумму размеров таблиц и объём каталога base/<OID базы> на диске. Эти значения должны быть сопоставимы, с поправкой на служебные файлы.

OID базы для проверки каталога возвращает запрос SELECT oid, datname FROM pg_database;. Если сумма по таблицам сильно меньше размера базы, разница обычно уходит на индексы, TOAST и системный каталог — это нормально.

Контрольные точки

Как проверить результат

Размер из pg_database_size и объём каталога base/OID на диске
Норма

Значения близки, разница объясняется служебными файлами

Тревожный признак

Каталог на диске в разы больше — проверьте 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, но он блокирует таблицу и требует свободного места — проводите его только в нерабочее время после резервной копии.