Skip to main content

Очистка бд смартл3

В Л3 со стартовой страницы заходим в admin 

image.png

Далее в "Очистка база данных"

image.png

Панель управления задачей по очистке базы данных позволяет: 
1. Задать параметры задачи 

             Периодический запуск - ставим ли мы задачу на повтор - если ставим то нужно задать расписание когда будет выполняться очистка, если нет то можно настроить разовый отложенный запуск задачи 

            Очищать партии старше - партии у которых orderDateTime старше заданного количества дней(какие партий мы сохраним в результате очистки)

            Тип расписания&Расписание - настраиваете параметры повтора задачи 

            Запустить задачу - Запустить задачу прямо сейчас с текущими параметрами* Это не влияет на автоматический запуск если он настроен, то есть если у вас задача запускается раз в месяц и следующий запуск через неделю и вы сейчас запустили он не сдвинется

image.png

Статистика по выполняемой задаче обновляется при смене статусов

                                                          ОСТАНОВЛЕНА

ОЖИДАНИЕ -> ВЫПОЛНЯЕТСЯ -> ОБРАБОТКА БАЗЫ ДАННЫХ -> ЗАВЕРШЕНА 

                                                          ОСТАНОВЛЕНА С ОШИБКОЙ

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

Неблокирующая операция перестраивания индексов таблицы - выполняется очень долго + в момент выполнения индексы копируются и места на диске может оказаться занято ещё больше чем было до удаления на время выполнения операции

Сейчас закомментирована и не выполняется после очистки партий 

Эти операции не возвращают место на диске ОС - данные очищаются но освободившееся место остаётся зарезервированным для переиспользования Постгресом