Сразу скажем – статья технического характера и без общих инструкций. Разбираем частный случай для одной из баз.
Задача: найти решение, как сократить объем информационной базы 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С по вопросам клиентов. Задавайте вопрос на сайте — постараемся помочь всеми техническими силами. Безопасной и производительной работы в Windows и 1С.