Добавить в корзинуПозвонить
Найти в Дзене
Digital

О сжатии базы 1С на PostgreSQL

Сразу скажем – статья технического характера и без общих инструкций. Разбираем частный случай для одной из баз. Задача: найти решение, как сократить объем информационной базы 1С на СУБД PostgreSQL. На момент заявки ИБ «распухла» до 236 Гб, и сохраняется тенденция к быстрому росту. При этом для базы настроен том (папка) для хранения файлов – занимает ~88 Гб на сервере. Клиент утверждает, что таких объемов данных в самой базе нет. А значит – что-то здесь не так. Для анализа нам предоставлена выгрузка – bak-файл ~9,3 Гб в формате PostgreSQL. Создана с помощью стандартной утилиты pg_dump. Параметры тестового стенда: Делаем стандартную установку компонентов СУБД с опциями:
☑ Включить контрольные суммы для страниц;
☑ Настроить переменные среды;
⊙ Провести оптимизацию параметров. Итог: в системе установлен PostgreSQL и работает системная служба «postgresql-1c-15». Выбор 15-й версии обусловлен конфигурацией СУБД на промышленном сервере. Регистрируем в консоли администрирования 1С новую информ
Оглавление

Сразу скажем – статья технического характера и без общих инструкций. Разбираем частный случай для одной из баз.

Задача: найти решение, как сократить объем информационной базы 1С на СУБД PostgreSQL. На момент заявки ИБ «распухла» до 236 Гб, и сохраняется тенденция к быстрому росту.

При этом для базы настроен том (папка) для хранения файлов – занимает ~88 Гб на сервере.

О сжатии базы 1С на PostgreSQL
О сжатии базы 1С на PostgreSQL

Клиент утверждает, что таких объемов данных в самой базе нет. А значит – что-то здесь не так.

Для анализа нам предоставлена выгрузка – bak-файл ~9,3 Гб в формате PostgreSQL. Создана с помощью стандартной утилиты pg_dump.

Параметры тестового стенда:

  • Windows 10 Pro x64 версия 22H2 (сборка ОС 19045.4651), ОЗУ 24 Гб;
  • СУБД PostgreSQL for 1C 15.8 x64;
  • Технологическая платформа 1С 8.3.24.1548 x64.

1. Установка PostgreSQL для 1С

Делаем стандартную установку компонентов СУБД с опциями:
☑ Включить контрольные суммы для страниц;
☑ Настроить переменные среды;
⊙ Провести оптимизацию параметров.

Итог: в системе установлен PostgreSQL и работает системная служба «postgresql-1c-15». Выбор 15-й версии обусловлен конфигурацией СУБД на промышленном сервере.

2. Восстановление базы из бэкапа

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

Запускаем восстановление из консоли с правами администратора:

cd "C:\Program Files\PostgreSQL 1C\15\bin"
pg_restore --host localhost --port 5432 --username postgres --dbname UNF --clean --verbose "C:\backup\UNF.backup"

При подключении к базе данных вводим пароль администратора БД и нажимаем Enter. Дожидаемся завершения процесса:

Восстановление информационной базы 1С с помощью pg_restore
Восстановление информационной базы 1С с помощью pg_restore

База развернута и занимает на диске 151 Гб. Это уже хорошо. По сравнению с рабочим сервером (236 Гб) объем сократился больше, чем на треть (на 36%).

Промежуточный вывод: выгрузка копии базы и повторная загрузка в новую чистую ИБ может положительно сказаться на размере занимаемого ей пространства.

3. Что больше всего занимает места в базе

Первым делом захотелось узнать, какая таблица в базе занимает больше всего места. Для этого использовали внешнюю обработку – epf-файл для получения размеров базы и таблиц. Скачать можно здесь.

Для работы с внешней обработкой требуется учетная запись 1С с правами администратора и группа доступа «Открытие внешних отчетов и обработок».

Файл – Открыть – Размеры таблиц метаданных ИПА (для любой базы 83).epf – Получить размер на все

Первый «виновник» найден: «РегистрСведений.Б24_К_Логирование» с размером в 120 Гб. Имя таблицы хранения: InfoRg29526. Нужен ли этот лог – вопрос.

Руководитель подтвердил, что данные из этого регистра не требуются – поэтому запускаем программную очистку. Используем внешнюю обработку — ОчистикаРегистраСведений1С.epf.

Файл – Открыть – ОчистикаРегистраСведений1С.epf – Имя регистра: Б24_К_Логирование – Очистить регистр

Очистка регистра сведений 1С
Очистка регистра сведений 1С

При выполнении получили следующую ошибку:

Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
Ошибка СУБД:
XX001: ERROR: invalid page in block 12443109 of relation base/16398/50289
Подробный текст ошибки
Подробный текст ошибки

Закрываем 1С и подключаемся к базе с помощью командной строки:

cd "C:\Program Files\PostgreSQL 1C\15\bin"
psql
\c UNF
SELECT pg_filenode_relation(0, 50289); – в результате получаем имя таблицы
SET zero_damaged_pages = on;
VACUUM FULL _inforg29526x1; – запускаем восстановление
Восстановление таблицы _inforg29526x1
Восстановление таблицы _inforg29526x1

Новый сюрприз – для завершения операции не хватает места на диске. Добавляем свободного места, и повторно запускаем команду.

ERROR: could not extend file "base/16398/1080815.75": No space left on device
ПОДСКАЗКА: Check free disk space.
ERROR: No space left on device
ERROR: No space left on device

Повторно запускаем очистку регистра сведений «Б24_К_Логирование» через интерфейс 1С:Предприятия. В этот раз операция завершается без ошибок.

4. Сжатие базы PostgreSQL

Рекомендуемые операции обслуживания ИБ – команды сжатия (VACUUM) и реиндексация (REINDEX). Необходимо учесть, что их выполнение может занять продолжительное время, т. к. зависит от размера базы и производительности сервера.

В консоли psql:

\c UNF
vacuum full verbose;
Выполнение команды VACUUM
Выполнение команды VACUUM

Следующим шагом запускаем переиндексацию в консольном режиме (рекомендуется):

cd "C:\Program Files\PostgreSQL 1C\15\bin"
reindexdb.exe -d UNF -U postgres

Смотрим объем ИБ UNF на диске – 23,1 Гб. Мама мия – минус 84,7%. Таким образом, в базе остались основные таблицы, а файлы – в отдельном томе.

✅ Что может помочь в задаче сжатия:

  • выгрузка/загрузка ИБ;
  • (опционально) поиск и очистка объектов хранения, данные которых не требуются, а также и сокращение/отключение избыточного логирования;
  • периодическое выполнение операций обслуживания для баз PostgreSQL (vacuum, reindex) по расписанию.

__________

⚡ Подписывайтесь на телеграм-канал, где разбираем настройки 1С по вопросам клиентов. Задавайте вопрос на сайте — постараемся помочь всеми техническими силами. Безопасной и производительной работы в Windows и 1С.