Загрузки в хранилище начались лет 5 назад. Примерно, каждые 2-3 дня, приходило по пакету.
Размер таблиц, ограничивали инфо-провайдером:
| 
Таблица | 
Размер ДО | 
Размер ПОСЛЕ | 
Уменьшение объема, % | 
| 
RSICCONT | 
17.933 | 
11.998 | 
66% | 
| 
RSMONICDP | 
118.904 | 
0 | 
0% | 
| 
RSODSACTREQ | 
17.948 | 
12.013 | 
66% | 
| 
RSREQICODS | 
18.006 | 
0 | 
0% | 
| 
RSSTATMANPART | 
17.933 | 
11.998 | 
66% | 
| 
RSSTATMANPARTT | 
35.857 | 
23.987 | 
66% | 
Удаляли запросы, старше 9 месяцев
– время активации пакета с 8 строками увеличилось с 60 секунд до 39 (35%).
Время активации пакета с 849 142 строками
уменьшилось с 293 секунд до 267 (91,1%) – мало, но так же уменьшилось время загрузки с 244 секунд
до 191 (78,2%).
Процесс сокращения списка
запросов проходит достаточно быстро, но лучше включать его в отдельную цепочку,
с периодом – от одной недели.
Оболочка для регулярного запуска:
*&---------------------------------------------------------------------*
*& Report ZN_REDUCE_REQUESTLIST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
*"----------------------------------------------------------------------
REPORT zn_reduce_requestlist.
TABLES: rsiccont, tvarvc, rsdodso, rsdcube.
DATA:
BEGIN OF ls_icubes,
icube LIKE rsiccont-icube,
count TYPE i,
END OF ls_icubes.
DATA:
lt_icubes LIKE TABLE OF ls_icubes,
i_tvarvc LIKE tvarvc OCCURS 0 WITH HEADER LINE.
DATA:
l_icube LIKE rsiccont-icube,
l_count TYPE i.
FIELD-SYMBOLS:
<ls_icubes> LIKE ls_icubes.
*-----------------------------------------------------------------------
INCLUDE z_debug. "This is are manual break-point
PARAMETERS: prod TYPE rs_bool AS CHECKBOX.
PARAMETERS: month TYPE num2 DEFAULT '12'.
*-----------------------------------------------------------------------
*" Определяем список инфо-провайдеров
*" из таблицы RSICCONT.
EXEC SQL.
OPEN C FOR
SELECT "t01"."ICUBE" AS "l_icube", COUNT("t01"."RNR") AS "l_count"
FROM "RSICCONT" "t01"
LEFT JOIN "RSDCUBE" "t02" ON "t01"."ICUBE"="t02"."INFOCUBE"
LEFT JOIN "RSDODSO" "t03" ON "t01"."ICUBE"="t03"."ODSOBJECT"
WHERE "t02"."OBJVERS" = 'A' OR "t03"."OBJVERS" = 'A'
GROUP BY ICUBE
HAVING COUNT(RNR) > 1000
ORDER BY ICUBE
ENDEXEC.
DO.
EXEC SQL.
FETCH NEXT C INTO :l_icube,:l_count
ENDEXEC.
IF sy-subrc NE 0.
EXIT.
ELSE .
ls_icubes-icube = l_icube.
ls_icubes-count = l_count.
APPEND ls_icubes TO lt_icubes.
ENDIF.
ENDDO.
EXEC SQL.
CLOSE C
ENDEXEC.
*-----------------------------------------------------------------------
LOOP AT lt_icubes ASSIGNING <ls_icubes>.
CALL FUNCTION 'RSSM_REDUCE_REQUESTLIST'
EXPORTING
i_dta = <ls_icubes>-icube
i_prod = prod
i_month = month.
ENDLOOP.
*-----------------------------------------------------------------------
Note: Стандартный FM RSSM_REDUCE_REQUESTLIST смотрит на последнюю дату загрузки каждого из дельта-потоков. И если какой-то поток больше не используем - удалить все запросы не выйдет.
*& Report ZN_REDUCE_REQUESTLIST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
*"----------------------------------------------------------------------
REPORT zn_reduce_requestlist.
TABLES: rsiccont, tvarvc, rsdodso, rsdcube.
DATA:
BEGIN OF ls_icubes,
icube LIKE rsiccont-icube,
count TYPE i,
END OF ls_icubes.
DATA:
lt_icubes LIKE TABLE OF ls_icubes,
i_tvarvc LIKE tvarvc OCCURS 0 WITH HEADER LINE.
DATA:
l_icube LIKE rsiccont-icube,
l_count TYPE i.
FIELD-SYMBOLS:
<ls_icubes> LIKE ls_icubes.
*-----------------------------------------------------------------------
INCLUDE z_debug. "This is are manual break-point
PARAMETERS: prod TYPE rs_bool AS CHECKBOX.
PARAMETERS: month TYPE num2 DEFAULT '12'.
*-----------------------------------------------------------------------
*" Определяем список инфо-провайдеров
*" из таблицы RSICCONT.
EXEC SQL.
OPEN C FOR
SELECT "t01"."ICUBE" AS "l_icube", COUNT("t01"."RNR") AS "l_count"
FROM "RSICCONT" "t01"
LEFT JOIN "RSDCUBE" "t02" ON "t01"."ICUBE"="t02"."INFOCUBE"
LEFT JOIN "RSDODSO" "t03" ON "t01"."ICUBE"="t03"."ODSOBJECT"
WHERE "t02"."OBJVERS" = 'A' OR "t03"."OBJVERS" = 'A'
GROUP BY ICUBE
HAVING COUNT(RNR) > 1000
ORDER BY ICUBE
ENDEXEC.
DO.
EXEC SQL.
FETCH NEXT C INTO :l_icube,:l_count
ENDEXEC.
IF sy-subrc NE 0.
EXIT.
ELSE .
ls_icubes-icube = l_icube.
ls_icubes-count = l_count.
APPEND ls_icubes TO lt_icubes.
ENDIF.
ENDDO.
EXEC SQL.
CLOSE C
ENDEXEC.
*-----------------------------------------------------------------------
LOOP AT lt_icubes ASSIGNING <ls_icubes>.
CALL FUNCTION 'RSSM_REDUCE_REQUESTLIST'
EXPORTING
i_dta = <ls_icubes>-icube
i_prod = prod
i_month = month.
ENDLOOP.
*-----------------------------------------------------------------------
Note: Стандартный FM RSSM_REDUCE_REQUESTLIST смотрит на последнюю дату загрузки каждого из дельта-потоков. И если какой-то поток больше не используем - удалить все запросы не выйдет.

 
Комментариев нет:
Отправить комментарий