Очистка бд смартл3
В Л3 со стартовой страницы заходим в admin
Далее в "Очистка база данных"
Панель управления задачей по очистке базы данных позволяет:
1. Задать параметры задачи
Периодический запуск - ставим ли мы задачу на повтор - если ставим то нужно задать расписание когда будет выполняться очистка, если нет то можно настроить разовый отложенный запуск задачи
Очищать партии старше - партии у которых orderDateTime старше заданного количества дней(какие партий мы сохраним в результате очистки)
Тип расписания&Расписание - настраиваете параметры повтора задачи
Запустить задачу - Запустить задачу прямо сейчас с текущими параметрами* Это не влияет на автоматический запуск если он настроен, то есть если у вас задача запускается раз в месяц и следующий запуск через неделю и вы сейчас запустили он не сдвинется
Статистика по выполняемой задаче обновляется при смене статусов
ОСТАНОВЛЕНА
ОЖИДАНИЕ -> ВЫПОЛНЯЕТСЯ -> ОБРАБОТКА БАЗЫ ДАННЫХ -> ЗАВЕРШЕНА
ОСТАНОВЛЕНА С ОШИБКОЙ
VACUUM FULL TABLE_NAME
Эту команду нужно выполнить после очистки если нужно вернуть память на диск - команда блокирующая то есть в этот момент работы с бд лучше чтобы не осуществлялась(блокирует только таблицу на которой выполняется). Несмотря на то что блокирующая в зависимости от объёма данных может выполняться вплоть до нескольких часов имейте это ввиду(ориентироваться можно на 3 гб данных - 5 минут обработки но это очень грубо)
ТЕСТИРОВАНИЕ запросами
Ветка SOFT-4865
Запросы в постман(все с авторизацией через Bearer token)
PUT запрос
localhost:8833/api/clear/config?days=90&isRepeat=false&cron=0 */10 * *
Ручка чтобы задать параметры задачи по очистке бд
days- старше скольки дней orderDateTime мы чистим партии(партии за сколько дней мы оставляем в бд) --минимальное значение 90 стоит ограничение на уровне бд
isRepeat - флаг ставим ли мы эту задачу на автозапуск по крон расписанию(false - не ставим true - ставим будет запускаться автоматически пока работает л3)
cron - строка расписания для задачи (всего 6 указателей)
секунды минуты часы деньМесяца месяц деньНедели
*(Звездочка) — любое значение. «Каждый месяц», «каждый час».,(Запятая) — перечисление.1,15,30в поле минут значит: в 1, 15 и 30 минут.-(Дефис) — диапазон.9-18в поле часов значит: каждый час с 9 до 18 включительно./(Слэш) — шаг (инкремент).*/5в минутах значит: каждые 5 минут.10/20— начать в 10 и далее каждые 20 (10, 30, 50).?(Вопрос) — «любое значение», используется только в полях День месяца и День недели, чтобы избежать конфликта между ними (если указали конкретный день месяца, в дне недели ставим?).L(Last) — последний.Lв поле дня месяца — последний день месяца (28-31).
Все параметры опциональны но обязательно передать хотя бы один параметр
То есть если у вас была до выключения настроенная задача на автоматизированное выполнение то после перезапуска информация о задаче сохраниться в бд но задача будет неактивна и нужно вызвать эту ручку без параметров чтобы активировать её и поставить планировщику на выполнение
Если выполнить запрос из примера выше(isRepeat=false с установленной крон задачей) то это считается отложенной не автоматизированной задачей - она выполнится один раз в ближайшее время по крон строке
POST запрос
localhost:8833/api/clear/start
Это запустит задачу которая уже есть в бд
*Задача есть в бд всегда но если не менять ей параметры то дефолтная задача выглядит так:
days = 180 (90 минимальное значение)
isRepeat = false
остальные параметры не заданы
POST запрос
localhost:8833/api/clear/stop
Останавливает выполнение задачи
GET запрос
localhost:8833/api/clear/task
получить задачу(параметры задачи которая на данный момент в бд )
После того как все данные по каждой партии удалены а сами устаревшие партии помечены в бд как is_sgtins_deleted true начинается процесс очистки бд от мёртвых данных
VACUUM ANALYZE TABLE
Когда мы выполняем delete постгрес не удаляет данные сразу - он помечает их как мёртвые строки и эта операция позволяет запустить встроенный механизм постгрес по очистке мёртвых данных но эта операция не возвращает освобождённую память обратно на диск
Операция не блокирующая так что к бд можно обращаться
VACUUM FULL TABLE
Это также как прошлая команда только освобождает память на диске
REINDEX CONCURRENTLY TABLE
Неблокирующая операция перестраивания индексов таблицы - выполняется очень долго + в момент выполнения индексы копируются и места на диске может оказаться занято ещё больше чем было до удаления на время выполнения операции
Сейчас закомментирована и не выполняется после очистки партий
Эти операции не возвращают место на диске ОС - данные очищаются но освободившееся место остаётся зарезервированным для переиспользования Постгресом


