SAP性能测试

*&---------------------------------------------------------------------*
*& Report ZTESTDB
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTESTDB.

  DATA: t1  TYPE i,
        t2  TYPE i,
        t3  TYPE i,
        t4  TYPE i,
        t5  TYPE i,
        t6  TYPE i,
        t7  TYPE i,
        don TYPE i,
        BEGIN OF lt OCCURS 0,
          matnr TYPE mseg-matnr,
          werks TYPE mseg-werks,
          menge TYPE mseg-menge,
          mblnr TYPE mseg-mblnr,
          mjahr TYPE mseg-mjahr,
          zeile TYPE mseg-zeile,
          maktx TYPE makt-maktx,
*          cpudt_mkpf TYPE mseg-cpudt_mkpf,
*          SHKZG TYPE mseg-SHKZG,
        END OF lt,
        time(33),
        lts      LIKE TABLE OF lt WITH HEADER LINE,
        ltt      LIKE TABLE OF lt WITH HEADER LINE,
        t        TYPE p DECIMALS 0.

  don = 5.
  don = 1.

  DO don TIMES.
    time = sy-index.
    CONDENSE time .
    time = '执行次数:' && time.
    WRITE: / '***********************************************************',
    time.
    CLEAR :
    lt[],
    lts[],
      t1 ,
      t2 ,
      t3 ,
      t4 ,
      t5 ,
      t7 ,
      t6 .

    GET RUN TIME FIELD t1.
    SELECT *
      UP TO 7000000 ROWS
      FROM mseg
      INTO CORRESPONDING FIELDS OF TABLE lt.

    GET RUN TIME FIELD t2.

    LOOP AT lt.
      lts-matnr = lt-matnr.
      lts-werks = lt-werks.
*      lts-lgort = lt-lgort.
      lts-menge = lt-menge.
**      lts-cpudt_mkpf = lt-cpudt_mkpf.
**      lts-cpudt_mkpf+6(2) = '01'.
**
**      IF lt-SHKZG = 'H'.
**        lts-menge = lts-menge * ( -1 ).
**      ENDIF.
      COLLECT lts.
    ENDLOOP.

    GET RUN TIME FIELD t3.
    SORT lt ASCENDING BY matnr werks.

    LOOP AT lt.
      ltt-menge = ltt-menge + ltt-menge .
      AT END OF werks.
        ltt-matnr = lt-matnr.
        ltt-werks = lt-werks.
        APPEND ltt.
        CLEAR ltt.
      ENDAT.
    ENDLOOP.

    GET RUN TIME FIELD t4.
    SORT lt ASCENDING BY matnr .
    DELETE ADJACENT DUPLICATES FROM lt COMPARING matnr.

    GET RUN TIME FIELD t5.

    SELECT *
      FROM makt
      INTO TABLE @DATA(ltm)
      FOR ALL ENTRIES IN @lt
      WHERE matnr = @lt-matnr.

    GET RUN TIME FIELD t6.

    SORT ltm ASCENDING BY matnr .

    LOOP AT ltt.
      READ TABLE ltm ASSIGNING FIELD-SYMBOL(<fs>) WITH  KEY matnr = ltt-matnr BINARY SEARCH.
      IF sy-subrc = 0.
        ltt-maktx = <fs>-maktx.
        MODIFY ltt.
      ENDIF.
    ENDLOOP.


    GET RUN TIME FIELD t7.

    time = ( t2 - t1 ) / 1000000.
    CONDENSE time .
    time = '数据库抽数据时间:' && time.
    WRITE / time.

    time = ( t3 - t2 ) / 1000000.
    CONDENSE time .
    time = 'collect 合计时间:' && time.
    WRITE / time.

    time = ( t4 - t3 ) / 1000000.
    CONDENSE time .
    time = 'at end      时间:' && time.
    WRITE / time.

    time = ( t5 - t4 ) / 1000000.
    CONDENSE time .
    time = ' DUPLICATES 时间:' && time.
    WRITE / time.

    time = ( t6 - t5 ) / 1000000.
    CONDENSE time .
    time = '取文本      时间:' && time.
    WRITE / time.

    time = ( t7 - t6 ) / 1000000.
    CONDENSE time .
    time = '文本赋值    时间:' && time.
    WRITE / time.
  ENDDO.

    GET RUN TIME FIELD t1.
  SELECT matnr
    FROM mara
    UP TO 1000 ROWS
    INTO CORRESPONDING FIELDS OF TABLE lt.

  LOOP AT lt.
    SELECT SINGLE maktx
      FROM makt INTO lt-maktx
      WHERE matnr = lt-matnr
      AND spras = '1'.
    MODIFY lt.
  ENDLOOP.

  GET RUN TIME FIELD t2.
  time = ( t2 - t1 ) / 1000000.

  CONDENSE time .
  time = '数据库循环抽数据时间:' && time.
  WRITE / time.


关键词: ABAP

网友评论

发表评论