본문 바로가기

TECH ZOOM

[SAP HANA 기획연재-3] Performance 튜닝


ABAP For HANA 개발방식

SAP HANA기반의 SAP BUSINESS SUITE인 SUITE ON HANA에서도 기존의 OPEN SQL은 문제없이 실행되고 SAP HANA 문법에 기반한 NATIVE SQL, INFORMATION VIEW, PROCEDURE 등에 대한 개발 및 접근도 가능합니다.

하지만 SAP HANA 환경에서 기존의 OPEN SQL이 성능에 최적화 되었다고 볼 수는 없습니다.

기존의 ABAP 개발방식은 DATABASE의 부하를 줄이기 위해서 복잡한 계산이 포함된 비즈니스 로직을 대부분 APPLICATION 레벨에서 구현하였고, 적은 레코드수의 결과를 얻기 위해서 다량의 데이터를 DATABASE에서 APPLICATION 서버로 전송하기도 하였습니다.

SUITE ON HANA 환경에서는 이러한 개발방식 보다는 HANA DATABASE의 효과를 극대화 하기 위하여 복잡한 비즈니스 로직을 DATABASE 레벨에서 구현하고 최소한의 DATA만 APPLICATION 레벨로 옮길 필요가 있습니다.




Performance guideline

기존의 RDBMS에서의 ABAP 개발 가이드라인과 SAP HANA DB에서의 ABAP 개발 가이드라인은 변경되는 부분이 있기 때문에 Performance를 향상시키는 개발 가이드라인을 이해하고 이를 응용하여 적용시킬 필요가 있습니다.


Golden Rule HANA relevance
Keep the result sets small
(Where 구문을 사용하여 Result Set 최소화)
이전처럼 중요.
Minimise the amount of transferred data
(* 대신에 Field List 사용, Aggregate Function 사용)
컬럼 기반의 SAP HANA에서는 컬럼 별로 멀티 프로세싱 작업을 하기 때문에 이전보다 더 중요.
Minimise the number of data transfers
(Select Loop 대신에 Join, Subquery, For All Entries 사용)
중첩된 SELECT 구문은 SAP HANA에서 더 많은 성능 저하를 일으키기 때문에 이전보다 더 중요. For All Entries 구문 사용은 맞지 않음.
Minimise the search overhead
(적절한 보조 인덱스를 정의하고 사용)
SAP HANA에서는 보조 인덱스를 필요로 하지 않기 때문에 이 Rule은 HANA에 필요 없음.
Keep load away from the database
(DB에서 많은 데이터를 READ 하지 않음)
SAP HANA에서는 데이터베이스의 부담을 줄이기 보다는 데이터베이스 내에서의 작업이 더 효율적이기 때문에 이 룰은 HANA에 맞지 않음.


Performance Tuning 예시

1. LOOP 안의 SELECT 구문을 Subquery를 사용하여 개선


SELECT DISTINCT VBELN INTO CORRESPONDING FIELDS OF TABLE IT_VBAP FROM VBAP.

LOOP AT IT_VBAP INTO WA_VBAP.
   SELECT SINGLE ERDAT ERNAM AUDAT VBTYP TRVOG
   INTO CORRESPONDING FIELDS OF WA_VBAK
   FROM VBAK
   WHERE VBELN = WA_VBAP-VBELN.
   APPEND WA_VBAK TO IT_VBAK .
ENDLOOP.

LOOP 안의 SELECT 구문으로 인하여 레코드건수 만큼 SQL이 실행 되어 성능 저하




=> Subquery를 사용하여 1번만 SQL이 실행되어 성능 개선

SELECT ERDAT ERNAM AUDAT VBTYP TRVOG
INTO CORRESPONDING FIELDS OF TABLE IT_VBAK
FROM VBAK
WHERE VBELN IN ( SELECT DISTINCT VBELN FROM VBAP ).




2. FOR ALL ENTRIES 구문을 JOIN을 사용하여 개선


SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_COBK

FROM COBK.
SELECT * FROM COEP
   INTO CORRESPONDING FIELDS OF TABLE IT_COEP
   FOR ALL ENTRIES IN IT_COBK
WHERE KOKRS = IT_COBK-KOKRS
   AND BELNR = IT_COBK-BELNR.

FOR ALL ENTRIES 구문으로 인하여 다수의 SQL이 실행되어 성능 저하




=> JOIN을 사용하여 1번만 SQL이 실행되어 성능 개선

SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_COEP
FROM COEP AS A INNER JOIN COBK AS B
   ON B~KOKRS = A~KOKRS AND B~BELNR = A~BELNR.




ABAP For HANA Performance Tuning Tip

1. 반복적인 SQL이 사용되는 개발 방식은 지양합니다. (ex: Loop안의 SELECT, For All Entries 구문 등)
2. DB 레벨에서 작업이 가능하게 하는 CDS(Core Data Service), Information View 등의 신규기능을 적절히 활용합니다.
3. OPEN SQL로 안 되는 경우나 배치 프로그램 등의 작업에 Native SQL 등을 적절히 활용합니다.
4. Performance 가이드라인을 준수합니다.





'TECH ZOOM' 카테고리의 다른 글

통합 시스템으로 IT 복잡성 해소!  (0) 2015.12.22
Hitachi UCP for S/4 HANA  (0) 2015.11.26
Hitachi Data Systems Flash Soccer King  (0) 2015.11.25