четверг, 20 февраля 2014 г.

Сокращение списка запросов для старых хранилищ. Ускоряем загрузку и активацию.




Загрузки в хранилище начались лет 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.
TABLESrsicconttvarvcrsdodsorsdcube.

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 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 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(RNR1000
  ORDER BY ICUBE
ENDEXEC.

DO.
  EXEC SQL.
    FETCH NEXT 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 смотрит на последнюю дату загрузки каждого из дельта-потоков. И если какой-то поток больше не используем - удалить все запросы не выйдет. 

Комментариев нет:

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