АЦК. Уменьшение количества записей в таблице RPLLOG
Количество записей в RPLLOG зависит от скорости изменения данных (документы, справочники), поэтому и сказать точно, какое количество записей для него оптимальны не представляется возможным. "Нормальное"(условно) количество записей в таблице RPLLOG:
- до 100 млн. - для ЦИТП
- до 25-30 млн. - для НЕ ЦИТП (МФ, ФО)
Чтобы RplGenerationCleaner удалял записи старше 5 дней, необходимо в процедуре RPL$ASSIGN_GENERATION в строке:
-- We have three differen ranges of 'living time' for records in log, depending on rpltable generation_group
-- 10 days
-- 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.
ВАЖНО!
Количество записей без указания номера генерации поколений, выводящиеся скриптом:
*желательно, чтобы количество 9999 не превышало значения 30 000.
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);
ДОПОЛНИТЕЛЬНО
Также дополнительно необходимо проверить корректно ли настроен параметр в *.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;
Комментарии
Отправить комментарий