Skip to Content
0
Dec 08, 2022 at 07:49 PM

Select with joins causes High Memory usage 650GB

205 Views Last edit Dec 11, 2022 at 05:07 PM 4 rev

I need desperately your proposal on the following.

I have the below big select

SELECT DISTINCT edocdata~bukrs, edocdata~gjahr, edocdata~belnr, edocdata~budat, "#EC CI_SEL_NESTED
             acdoca~racct, edocdata~xblnr, bkpf~bldat, edocdata~series, edocdata~numbr,
             edocdata~invoice_type, bseg~buzid, acdoca~koart, bseg~qsskz, skb1~altkt,
             acdoca~mwskz, aade_vat~vat_category_mycloud, aade_vat~vat_exemption_categ_aade,
             coalesce( CASE WHEN bseg~shkzg = 'H' THEN -1 * bseg~dmbtr
                            ELSE bseg~dmbtr END, acdoca~hsl ) AS hsl,
             bkpf~hwaer, acdoca~kunnr, acdoca~lifnr, acdoca~blart,
             CASE WHEN bseg~shkzg = 'H' THEN -1 * bseg~qbshb
                  ELSE bseg~qbshb
             END AS qbshb,
             bset~kbetr * @( CONV kbetr_tax( '0.10' ) ) AS kbetr,
             edocdata~stceg,edocdata~name1 AS name, edocdata~stras AS street, edocdata~house_num1, edocdata~city1,
             edocdata~post_code1, edocdata~country,
             edocdata~zedoc_type, edocdata~sd_status, edocdata~rev_document,
             CASE WHEN acdoca~koart = 'D' THEN kna1~adrnr
                  WHEN acdoca~koart = 'K' THEN lfa1~adrnr
                  ELSE ' '
             END AS adrnr,
             CASE WHEN bseg~buzei IS NULL THEN acdoca~docln
                  ELSE bseg~buzei
             END AS docln
     FROM zslgebk_edocdtgt AS edocdata
        INNER JOIN zslgebk_control AS control
          ON edocdata~bukrs = control~company_code
        INNER JOIN bkpf
          ON edocdata~bukrs = bkpf~bukrs AND
             edocdata~gjahr = bkpf~gjahr AND
             edocdata~belnr = bkpf~belnr
        INNER JOIN acdoca ##DB_FEATURE_MODE[TABLE_LEN_MAX1]
          ON edocdata~bukrs = acdoca~rbukrs AND
             edocdata~gjahr = acdoca~gjahr AND
             edocdata~belnr = acdoca~belnr AND
             acdoca~rldnr = control~ledger
        LEFT OUTER JOIN bseg
          ON acdoca~rbukrs = bseg~bukrs AND
             acdoca~gjahr = bseg~gjahr AND
             acdoca~belnr = bseg~belnr AND
             acdoca~buzei = bseg~buzei
        LEFT OUTER JOIN bset
          ON acdoca~rbukrs = bset~bukrs AND
             acdoca~gjahr = bset~gjahr AND
             acdoca~belnr = bset~belnr AND
             acdoca~racct = bset~hkont
        LEFT OUTER JOIN kna1
          ON acdoca~kunnr = kna1~kunnr
        LEFT OUTER JOIN lfa1                         "#EC CI_SEL_NESTED
          ON acdoca~lifnr = lfa1~lifnr
        LEFT OUTER JOIN skb1
          ON acdoca~rbukrs = skb1~bukrs AND
             acdoca~racct = skb1~saknr
        LEFT OUTER JOIN zslgebk_tax_vat AS aade_vat
          ON acdoca~rbukrs = aade_vat~company_code AND
             acdoca~mwskz = aade_vat~tax_code
      WHERE acdoca~rbukrs = @company_code
      ORDER BY edocdata~bukrs, edocdata~gjahr, edocdata~belnr, aade_vat~vat_category_mycloud,
               acdoca~mwskz, acdoca~koart, qbshb
      INTO CORRESPONDING FIELDS OF TABLE @it_web_service_data.SELECT DISTINCT edocdata~bukrs, edocdata~gjahr, edocdata~belnr, edocdata~budat, "#EC CI_SEL_NESTED
             acdoca~racct, edocdata~xblnr, bkpf~bldat, edocdata~series, edocdata~numbr,
             edocdata~invoice_type, bseg~buzid, acdoca~koart, bseg~qsskz, skb1~altkt,
             acdoca~mwskz, aade_vat~vat_category_mycloud, aade_vat~vat_exemption_categ_aade,
             coalesce( CASE WHEN bseg~shkzg = 'H' THEN -1 * bseg~dmbtr
                            ELSE bseg~dmbtr END, acdoca~hsl ) AS hsl,
             bkpf~hwaer, acdoca~kunnr, acdoca~lifnr, acdoca~blart,
             CASE WHEN bseg~shkzg = 'H' THEN -1 * bseg~qbshb
                  ELSE bseg~qbshb
             END AS qbshb,
             bset~kbetr * @( CONV kbetr_tax( '0.10' ) ) AS kbetr,
             edocdata~stceg,edocdata~name1 AS name, edocdata~stras AS street, edocdata~house_num1, edocdata~city1,
             edocdata~post_code1, edocdata~country,
             edocdata~zedoc_type, edocdata~sd_status, edocdata~rev_document,
             CASE WHEN acdoca~koart = 'D' THEN kna1~adrnr
                  WHEN acdoca~koart = 'K' THEN lfa1~adrnr
                  ELSE ' '
             END AS adrnr,
             CASE WHEN bseg~buzei IS NULL THEN acdoca~docln
                  ELSE bseg~buzei
             END AS docln
     FROM zslgebk_edocdtgt AS edocdata
        INNER JOIN zslgebk_control AS control
          ON edocdata~bukrs = control~company_code
        INNER JOIN bkpf
          ON edocdata~bukrs = bkpf~bukrs AND
             edocdata~gjahr = bkpf~gjahr AND
             edocdata~belnr = bkpf~belnr
        INNER JOIN acdoca ##DB_FEATURE_MODE[TABLE_LEN_MAX1]
          ON edocdata~bukrs = acdoca~rbukrs AND
             edocdata~gjahr = acdoca~gjahr AND
             edocdata~belnr = acdoca~belnr AND
             acdoca~rldnr = control~ledger
        LEFT OUTER JOIN bseg
          ON acdoca~rbukrs = bseg~bukrs AND
             acdoca~gjahr = bseg~gjahr AND
             acdoca~belnr = bseg~belnr AND
             acdoca~buzei = bseg~buzei
        LEFT OUTER JOIN bset
          ON acdoca~rbukrs = bset~bukrs AND
             acdoca~gjahr = bset~gjahr AND
             acdoca~belnr = bset~belnr AND
             acdoca~racct = bset~hkont
        LEFT OUTER JOIN kna1
          ON acdoca~kunnr = kna1~kunnr
        LEFT OUTER JOIN lfa1                         "#EC CI_SEL_NESTED
          ON acdoca~lifnr = lfa1~lifnr
        LEFT OUTER JOIN skb1
          ON acdoca~rbukrs = skb1~bukrs AND
             acdoca~racct = skb1~saknr
        LEFT OUTER JOIN zslgebk_tax_vat AS aade_vat
          ON acdoca~rbukrs = aade_vat~company_code AND
             acdoca~mwskz = aade_vat~tax_code
      WHERE acdoca~rbukrs = @company_code
      ORDER BY edocdata~bukrs, edocdata~gjahr, edocdata~belnr, aade_vat~vat_category_mycloud,
               acdoca~mwskz, acdoca~koart, qbshb
      INTO CORRESPONDING FIELDS OF TABLE @it_web_service_data.<br>

The Global Temporary Table zslgebk_edocdtgt is inserted from an ITAB and containing 150 or less records (no more). This Select uses approximately 650 GB.

I am using GT table because I didn't want to use the FOR ALL ENTRIES.

Can you suggest any solution to this problem? The system is SAP S/4HANA 1709.

Will be a CDS a solution?

Thanks

Elias

PS1. Let me show you how I fill the the GTT ZSLGEBK_EDOCDTGT

FIELD-SYMBOLS: <it_data>   TYPE STANDARD TABLE.
split_edocdata_to_smaller( cht_edocdata ).
     LOOP AT it_edocdata_small_tables INTO DATA(edocdata_small_table).
       ASSIGN edocdata_small_table->* TO <it_data>.
       INSERT zslgebk_edocdtgt FROM TABLE @<it_data>.<br>

The it_edocdata_small_tables is TYPE STANDARD TABLE OF REF TO data

And then follow the big SELECT. Is sth wrong with the insertion?

PS2. The same code and with 150 records in GTT ZSLGEBK_EDOCDTGT is working perfect and fills the ITAB IT_WEB_SERVICE_DATA with 959 records. Strange, really strange.