АЦК. Уменьшение количества записей в таблице RPLLOG

Количество записей в RPLLOG зависит от скорости изменения данных (документы, справочники), поэтому и сказать точно, какое количество записей для него оптимальны не представляется возможным. "Нормальное"(условно) количество записей в таблице RPLLOG:
  • до 100 млн. - для ЦИТП
  • до 25-30 млн. - для НЕ ЦИТП (МФ, ФО)
Таблица RPLLOG чистится сервисным заданием RplGenerationCleaner и по стандартной настройке удаляются записи старше 10 дней. Но можно поставить меньше, например 5 дней. Тогда система сама штатно будет удалять записи из RPLLOG, старше 5 дней.

Чтобы RplGenerationCleaner удалял записи старше 5 дней, необходимо в процедуре RPL$ASSIGN_GENERATION в строке:

-- We have three differen ranges of 'living time' for records in log, depending on rpltable generation_group
-- 10 days

SELECT max(day_version) INTO old_gen1

FROM dayversion

WHERE day_date < cast(sysdate AS date) - 10;


*цифру 10 поменять на цифру 5.

ВАЖНО!
Количество записей без указания номера генерации поколений, выводящиеся скриптом:
select 'count_nines: '||count(1) from rpllog where generation = 999999999999999
union
select 'count_all: '||count(1) from rpllog
union
select 'dayversion_max_day_date: '||max(DAY_DATE) from DAYVERSION where DAY_VERSION < (select min(GENERATION) from rpllog);

*желательно, чтобы количество 9999 не превышало значения 30 000.

ДОПОЛНИТЕЛЬНО
Также дополнительно необходимо проверить корректно ли настроен параметр в *.properties - azk.rpllog.service.disabled, который отвечает за запуск процедуры rpl$assign_generation

Если используется несколько серверов приложений(СП), то на одном СП(считаем его системным) нужно ставить значение false. Тут будет запускаться процедура rpl$assign_generation. На всех остальных СП указать true.

*только в этом случае корректно отрабатывает счётчик по переводу 9999 в нормальные версии.

Скрипт для ручной очистки таблицы RPLLOG - clean_rpllog_oracle.sql

Если записей в таблице большое количество:
--Определяем количество записей в таблице --100422938
SELECT COUNT(1)
  FROM rpllog;

--Определяем номер поколения --391631905
SELECT MIN(generation) 
  FROM rpllog;

--Смотрим по каким объектам записи
SELECT * 
  FROM rpl
 WHERE sent_version <=391631905 
   AND sent_version <>0;

--Определяем что это за сайт сайт

SELECT *

FROM msgsite

WHERE id = 802;


--Можно получить результат одним запросом (для АЦК-Финансы):

SELECT m.CAPTION AS Master,

m2.CAPTION AS Client,

r.NAME,

r.rpl_active,

r.SENT_VERSION,

r.TABLE_NAME,

r.FIELD1_VALUE

FROM rpl r

JOIN MSGSITE m ON m.id = r.MASTER_ID

JOIN MSGSITE m2 ON m2.ID = r.CLIENT_ID

WHERE sent_version > 0

AND (rpl_active = 0

--OR FIELD1_VALUE NOT IN (SELECT b.id FROM BUDGET b WHERE b.FINYEAR = '2023')

);


Дополнительный запрос:
/* Вывести количество записей в разрезе таблиц */

SELECT rt.NAME,

count(1)

FROM rpllog r

JOIN RPLTABLE rt ON rt.ID = r.RPLTABLE_ID

GROUP BY rt.NAME

ORDER BY count(1) DESC;

Комментарии

Популярные сообщения из этого блога

TRUNCATE / DELETE / DROP или как очистить таблицу

Linux (РедОС). Сброс пароля

ЭС с ЦБ РФ. РЕКВИЗИТНЫЙ СОСТАВ ЭС

КБК. КВФО - Код вида финансового обеспечения (деятельности)

ТФФ 35.0. Полный перечень документов альбома ТФФ (Таблица 2)