Загрузки в хранилище начались лет 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 смотрит на последнюю дату загрузки каждого из дельта-потоков. И если какой-то поток больше не используем - удалить все запросы не выйдет.
Комментариев нет:
Отправить комментарий