Лупонос Дмитрий, разработчик 1С, эксплуататор 1С, настройка серверов для 1С
Проблема
Из-за роста размера базы данных УТ11.1 столкнулся с задачей очистки документов “УстановкаЦенНоменклатуры” и регистров “ЦеныНоменклатуры” и “ЦеныНоменклатуры25”.
Поиск причины
На приведенном скриншоте используется обработка Структура хранения ИБ и в консоли postgres выполняется следующий код:
#В консоли psql соединяемся с базой данных
\c <ИмяБазы>;
#Выполнем запрос к таблицам базы данных, выстраивая их по уменьшению размера
SELECT
relname AS "Таблица",
pg_size_pretty(pg_total_relation_size(oid)) AS "Размер"
FROM
pg_class
WHERE
relkind = 'r'
ORDER BY
pg_total_relation_size(oid) DESC;
В результате выполненных действий нашел большую таблицу и сопоставил с объектом конфигурации. Этой таблицей оказался регистр “ЦеныНоменклатуры”.
Инструмент и его полезность
В первую очередь, задал вопрос в поисковик “Очистка цен номенклатуры за прошлые периоды”. Как ни странно, такой обработки на первых трех страницах не обнаружил. Не страшно, разработаю самостоятельно
Алгоритм работы
Так как размер таблицы относительно других существенно больше, то процесс очистки надо производить аккуратно, возможны сбои при работе. Этапы действий обработки:
- Получить остатки по регистрам “ЦеныНоменклатуры” и “ЦеныНоменклатуры25”, если включено формирование цен 2.5 на каждый конец года, если в периоде 01.01-31.12 года есть документы “УстановкаЦенНоменклатуры”;
- Сформировать остатки по регистру ЦеныНоменклатуры, если дата перехода на цены 2.5 > периода формирования цен; Иначе на конец года формируем остатки по регистру ЦеныНоменклатуры25;
- На основании периодов обработки (например, 31.12.2017 – 31.12.2018) сформировать новые документы, каждый по одному виду цен, заполненные Срезом Последних цен на конец периода “Год” по логике предыдущего пункта. При этом для разгрузки документов установки цен, не устанавливать цены на товары, у которых они на срез последних по периоду равны нулю или пустые. Провести документы.
- Помнить, что если таблица документа содержит более 99 999 строк, то при сохранении будет ошибка и документ не проведётся. Максимальное количество строк документа в результате действий обработки установить в 99 900 строк (и так медленно открывается документ с таким количеством строк);
Реализация
Обработка на инфостарте, описание решений выложил в описании к публикации.
Результат
После выполнения обработки выполнил Тестирование И Исправление в конфигураторе базы, пункт Реиндексация. Ожидаемо уменьшился размер
Размер таблиц информационной базы УТ11.4 в СУБД PostgreSQL за период 2017 – 2023 год уменьшился на 60Gb: со 125 Гб на рабочей таблица регистра до 78Гб и с 25Гб таблица “Товары” документов до 10 Гб (это текущий год, ежедневно заполняется куча строк)