Автоматическая подрезка данных в базах данных операционного дня и лояльности

Публичное пространство

Автоматическая подрезка данных в базах данных операционного дня и лояльности

10.2.66.0

https://crystals.atlassian.net/browse/SRTE-1971

Описание

Начиная с версии 10.2.66.0 есть возможность включения автоматической подрезки сущностей операционного дня и связаные с ним данных, которые не попадают в заданный интервал хранения. Автоматическая подрезка предназначена для того, чтобы у сервером с большим числом данных за день, не возникало проблем с его стабильностью и скоростью.

В данном случае производится удаление из таблиц, где количество записей может привезти к замедлению работы сервера.

Настройка

1. Выполните скрипт по 

set_operday.

DROP INDEX IF EXISTS od_purchase_index_id_session; CREATE INDEX od_purchase_index_id_session ON od_purchase USING btree (id_session); DROP INDEX IF EXISTS od_shift_id_session; CREATE INDEX od_shift_id_session ON od_shift (id_sessionstart);

2. Установите соответствующие настройки в 

set → 
sales_management_properties.

Настройка

Значение по умолчанию

Описание

Настройка

Значение по умолчанию

Описание

db.cleaner.cleaning.time

01:00

Время в формате HH:mm в которое запускается таймер очистки базы.

db.cleaner.objects.lifespan.days

75

Время жизни объектов в базе в днях. По истечении этого периода объекты будут удалены.

db.cleaner.enabled

false

Включена ли очистка базы.

db.cleaner.shift.batch.size

50

Размер пачки для удаления.

db.cleaner.cleaning.time.stop

04:00

Время в формате HH:mm окончания процедуры подрезки

https://crystals.atlassian.net/browse/CR-11739

https://crystals.atlassian.net/browse/SRTS-2800

10.4.7.0

  1.  

    1. При отсутствии, пустом или некорректном значении параметра - подрезка будет запускаться бесконечно.

    2. При правильном заполнении времени остановки подрезки - все процессы подрезки, которые не завершены, не запустяться.

      1. Уже запущенный процесс подрезки, указанный в поле entitiy_class_full_name, остановить невозможно.

      2. Но следующий по очереди процесс не запустится, если уже настало время после db.cleaner.cleaning.time.stop.

      3. В поле status таблицы maintenance_log запишется “TIMEOUT“ по всем процессам подрезки, что не успели завершиться до окончания

  2. В мониторинг подрезки в таблице maintenance_log добавлен столбец process сразу после столбца db_name.

    1. В столбец process запишется название процесса подрезки из maintenance.entitiy_class_full_name. Соответственно, мониторится каждый процесс, который по ней выполнялся.

    2. Добавлена новая колонка count, в которую будет записывается количество удалённых объектов в процессе подрезки.

Дополнительная информация

  • По-умолчанию установлено значение NULL - удаление не включено.

  • Удаление запускается по таймеру, 1 раз в определенный промежуток времени и выбирается для удаления все записи дата создания у которых больше [текущая дата - настройка подрезки].

  • При подрезке записей каскадно удалются все связи каждого кортежа сущности в базах данных 

    set_operday и

    set_loyal пока не закончатся записи с условием дата создания больше [текущая дата-настройка подрезки]

  • Учитываются ограничения количества выборки записей для подрезки, чтобы снизить вероятность выполнения запроса с очень большой результирующей выборкой.

  • Изменение настроек подрезки (удаления) применяются автоматически без перезапуска службы сервера приложений SetRetail10.

  • Во время подрезки чеков штатные процессы SetRetail10 не блокируются.

  • Удаление записей не влияет производительность.

Пример удаления записей с данными по чекам

Условие:

  • В базе данных = 200 000 000 чеков

  • Каждый чек содержит минимум 10 позиций

  • Каждый чек за текущую дату = 91 день

  • Установлена настройка подрезки = 90

  • Итого записей по условию Дата создания документа которых больше[текущая дата-90] в 

    set_opreday → 

    od_purchase = 2 100 000

Логика срабатывания:

  • Срабатывает таймер по запуску функции подрезки

  • Система делает выборку по таблице 

    od_purchase

  • Удаляются выбранные записи таблицы 

    od_purchase

  • Каскадно удаляются все связи каждого кортежа из 

    set_opreday → 

    od_purchase пока не кончатся записи с условием Дата создания документа больше [текущая дата-настройка подрезки]

© 1994-2025, ООО «Кристалл Сервис Интеграция».
Все права защищены.

Политика обработки персональных данных