Партиционирование таблицы иерархии (инструкция администратора)¶
Обзор¶
Партиционирование ускоряет работу с таблицей core_hierarchy_item, разбивая её на отдельные секции (LIST-партиции) по level_id. Таблица core_hierarchy_item_parents продолжает работать как обычная таблица.
Когда включать:
- количество элементов иерархии превышает ~100 000;
- отчёты и API активно фильтруют данные по уровням;
- заметны признаки деградации производительности при операциях с иерархией.
Команды управления¶
partitioning_enable¶
python manage.py partitioning_enable [--no-triggers] [--no-backup] [--force]
Основные опции:
--no-triggers— не устанавливать автоматическое создание/удаление партиций;--no-backup— не сохранять резервную копию исходной таблицы (core_hierarchy_item_old);--force— пропустить подтверждение (для автоматизации).
Что делает команда:
- Создаёт партиционированную копию таблицы
core_hierarchy_item. - Формирует партиции вида
core_hierarchy_item_level_<id>для всех уровней. - Переносит данные и проверяет целостность.
- Переключает приложение на новую структуру и, при необходимости, сохраняет резервную копию.
- По умолчанию настраивает триггеры автоматического управления.
⚠️ Во время операции таблица блокируется. Рекомендуется запускать в плановое окно и иметь резервную копию БД.
После завершения можно проверить итоговое состояние командой:
python manage.py partitioning_status --verbose
Все строки отчёта должны относиться только к таблице core_hierarchy_item.
partitioning_disable¶
python manage.py partitioning_disable [--keep-partition-backup] [--cleanup-old-tables] [--force]
Опции:
--keep-partition-backup— оставить текущую партиционированную таблицу (будет переименована вcore_hierarchy_item_partitioned_backup);--cleanup-old-tables— удалить ранее сохранённые резервные таблицы с суффиксом_old;--force— пропустить подтверждение.
Что делает команда:
- Снимает триггеры автоматического управления.
- Создаёт обычную таблицу
core_hierarchy_item_newи восстанавливает индексы. - Объединяет данные из всех партиций.
- Переключает схему обратно на непартиционированную структуру.
- По умолчанию удаляет партиции, резервная копия сохраняется только при
--keep-partition-backup.
partitioning_sync¶
python manage.py partitioning_sync [--level-id <id>] [--drop-orphans] [--force]
Используется для ручного обновления партиций:
- без параметров — создаёт недостающие и удаляет лишние партиции;
--level-id— создаёт партицию только для указанного уровня;--drop-orphans— удаляет партиции без соответствующего уровня.
partitioning_status¶
python manage.py partitioning_status [--verbose]
Выводит текущий статус (включено/отключено, количество уровней, число партиций, наличие триггеров). С флагом --verbose показывает размер и количество строк по каждой партиции таблицы core_hierarchy_item.
Рекомендованный рабочий процесс¶
- Подготовка — убедитесь, что тесты пройдены и есть резервная копия БД.
- Включение — выполните
partitioning_enable. После завершения при необходимости запуститеpartitioning_status --verbose. - Ежедневная работа — партиции создаются автоматически при добавлении новых уровней. Для ручной проверки используйте
partitioning_sync. - Отключение — при необходимости откатиться выполните
partitioning_disable. При желании сохраните партиционированный вариант как резервную копию (--keep-partition-backup).
Диагностика и восстановление¶
- Если команда завершилась ошибкой, временные таблицы
_newочищаются автоматически. При необходимости команду можно повторить. - Для полного ручного отката выполните
partitioning_disable --cleanup-old-tables --force. - При возникновении проблем с отсутствующими партициями запустите
partitioning_sync.
Дополнительные замечания¶
- Таблица
core_hierarchy_item_parentsне партиционируется и не требует дополнительных действий. - После включения партиционирования все INSERT‑операции в
core_hierarchy_itemпродолжают выполняться через ORM и существующие SQL-скрипты без изменений. - Для массовых загрузок рекомендуется предварительно вызвать
partitioning_sync, чтобы создать партиции для новых уровней заранее.
Важно: описанные настройки и сценарии могут отличаться в вашей инсталляции Planiqum
За уточнениями и методологической поддержкой обращайтесь в компанию
ЮНИК СОФТ