О сжатии базы 1С на PostgreSQL
Задача: найти решение, как сократить объем информационной базы 1С на СУБД PostgreSQL. На момент заявки ИБ «распухла» до 236 Гб, и сохраняется тенденция к быстрому росту.
При этом для базы настроен том (папка) для хранения файлов — занимает ~88 Гб на сервере.
Клиент утверждает, что таких объемов данных в самой базе нет. А значит — что-то здесь не так.
Для анализа нам предоставлена выгрузка — 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. Дожидаемся завершения процесса:
База развернута и занимает на диске 151 Гб. Это уже хорошо. По сравнению с рабочим сервером (236 Гб) объем сократился больше, чем на треть (на 36%).
Промежуточный вывод: выгрузка копии базы и повторная загрузка в новую чистую ИБ может положительно сказаться на размере занимаемого ей пространства.
3. Что больше всего занимает места в базе
Первым делом захотелось узнать, какая таблица в базе занимает больше всего места. Для этого использовали внешнюю обработку — epf-файл для получения размеров базы и таблиц. Скачать можно здесь.
Для работы с внешней обработкой требуется учетная запись 1С с правами администратора и группа доступа «Открытие внешних отчетов и обработок».
Файл — Открыть — Размеры таблиц метаданных ИПА (для любой базы 83).epf — Получить размер на все
Первый «виновник» найден: «РегистрСведений.Б24_К_Логирование» с размером в 120 Гб. Имя таблицы хранения: InfoRg29526. Нужен ли этот лог — вопрос.
Руководитель подтвердил, что данные из этого регистра не требуются — поэтому запускаем программную очистку. Используем внешнюю обработку — ОчистикаРегистраСведений1С.epf.
Файл — Открыть — ОчистикаРегистраСведений1С.epf — Имя регистра: Б24_К_Логирование — Очистить регистр
При выполнении получили следующую ошибку:
Невосстановимая ошибка
Ошибка при выполнении запроса 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;
Новый сюрприз — для завершения операции не хватает места на диске. Добавляем свободного места, и повторно запускаем команду.
ERROR: could not extend file «base/16398/1080815.75»: No space left on device
ПОДСКАЗКА: Check free disk space.
Повторно запускаем очистку регистра сведений «Б24_К_Логирование» через интерфейс 1С:Предприятия. В этот раз операция завершается без ошибок.
4. Сжатие базы PostgreSQL
Рекомендуемые операции обслуживания ИБ — команды сжатия (VACUUM) и реиндексация (REINDEX).
Необходимо учесть, что их выполнение может занять продолжительное время, т. к. зависит от размера базы и производительности сервера.
В консоли psql:
\c UNF
vacuum full verbose;
Следующим шагом запускаем переиндексацию в консольном режиме (рекомендуется):
cd "C:\Program Files\PostgreSQL 1C\15\bin"
reindexdb.exe -d UNF -U postgres
Смотрим объем ИБ UNF на диске — 23,1 Гб. Мама мия — минус 84,7%. Таким образом, в базе остались основные таблицы, а файлы — в отдельном томе.
✅ Что может помочь в задаче сжатия:
- • выгрузка/загрузка ИБ;
- • (опционально) поиск и очистка объектов хранения, данные которых не требуются, а также и сокращение/отключение избыточного логирования;
- • периодическое выполнение операций обслуживания для баз PostgreSQL (vacuum, reindex) по расписанию.
__________
Что-то не так с 1С или нужна настройка?
► Оставьте заявку или позвоните +7-911-500-10-11 — разберёмся и поможем.