SAP HANA 홖경에서의성능최적화를위한 ABAP 개발방안 2015.09.02 product 지원팀오승도과장
CONTENTS I. 개요 II. 싞규기능 III. Performance Guideline IV. Performance Tuning 예시 V. SAP HANA Appliance VI. 제언
Ⅰ 개요
SOH(Suite On HANA) 도입고객의궁금증 SOH 를도입하면무조건성능이개선되나? 기존프로그램은모두변경해야하나? 3
SOH(Suite On HANA) 도입고객의궁금증 SOH 를도입하면 무조건성능이개선되나? 기존의 RDBMS 에비하여빨라지기는하지만 최적화되었다고볼수는없음. 따라서프로그램최적화작업이필요하기도함. 4
SOH(Suite On HANA) 도입고객의궁금증 기존프로그램은 모두변경해야하나? 기존의프로그램은 SOH에서모두실행됨. 하지만대량의데이터를 ACCESS 하여수행속도가느린프로그램은 SOH에맞게프로그램수정필요. 5
ABAP FOR HANA 개발방식 기존의개발방식은 DB 서버의부하를줄이기위해서 Application Layer 에서작업이많이이루어졌음. 하지만 SOH 에서는 HANA DB 의뛰어난성능을극대화하기위하여 DB 에서작업이이루어지고최종결과값만젂송하는형태로프로그램이변경되어야함 기존개발방식 성능저하 계산처리 Application Layer ABAP FOR HANA 개발방식 SAP HANA 기능제한적사용 성능극대화 Database Layer 계산처리 최종결과값만젂송성능향상 6
Ⅱ 싞규기능
ABAP Development Tool 기존의 ABAP 개발자는 SAP GUI 홖경에서프로그램을개발하였지만 SAP HANA 에서제공하는다양한기능을사용하기위해서는 ECLIPSE 기반의 ABAP Development Tool 을사용하는것이효율적임. SAP HANA STUDIO 에 ADD-ON(Help -> Install New Software. ECLIPSE 버젂에따라서사이트가달라짐 https://tools.hana.ondemand.com/juno https://tools.hana.ondemand.com/kepler https://tools.hana.ondemand.com/luna 8
ABAP Development Tool 개발화면 9
ABAP Development Tool 결과화면 10
Open SQL New Syntax SAP NETWEAVER 7.4 SP05 에서추가된새로운기능은기존에비하여가독성을좋게하고데이터베이스레벨에서작업을가능하게하여성능향상에도움이됨. 컬럼분리및변수에 @ 사용 예시 ) SELECT CARRID, CONNID, FLDATE FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE @SFLIGHT_TAB WHERE CARRID = @CARRIER AND CONNID = @CONNECTION ORDER BY CARRID, CONNID. 11
Open SQL New Syntax 문자열연결 예시 ) SELECT CHAR1 && CHAR2 FROM DEMO_EXPRESSIONS INTO CORRESPONDING FIELDS OF TABLE @RESULTS. NULL 대체 예시 ) SELECT T1~A AS A1, T1~B AS B1, T1~C AS C1, T1~D AS D1, COALESCE( T2~D, '--' ) AS D2 FROM DEMO_JOIN1 AS T1 LEFT OUTER JOIN DEMO_JOIN2 AS T2 ON T2~D = T1~D INTO CORRESPONDING FIELDS OF TABLE @ITAB. 12
Open SQL New Syntax CASE 문사용 예시 ) SELECT ID, CHAR1, CHAR2, CASE CHAR1 WHEN 'AA' THEN ( CHAR1 && CHAR2 ) WHEN 'XX' THEN ( CHAR2 && CHAR1 ) ELSE @ELSE END AS TEXT FROM DEMO_EXPRESSIONS INTO CORRESPONDING FIELDS OF TABLE @RESULTS. 13
External View SAP HANA 데이터베이스에서개발한 Attribute View, Analytic View, Calculation View 를 ABAP 프로그램에서사용하기위해서는 External view 를생성하여 ABAP Dictionary 에 Information View 를 Import 해야함 Dictionary View 선택 (FILE -> NEW > OTHER -> ABAP -> ABAP Repository Object) 14
External View 예시 ) DATA LT_OPEN_DAYS TYPE STANDARD TABLE OF ZAT_OIA_OPENDAYS. SELECT * FROM ZAT_OIA_OPENDAYS INTO TABLE LT_OPEN_DAYS. 15
Database Procedure Proxy ABAP 프로그램에서 Information View 를사용하기위하여 External View 가필요한것처럼 HANA 데이터베이스에서생성한 Procedure 를사용하기위해서는 Database Procedure Proxy 가필요함 Database Procecure Proxy (ABAP -> Database Procedure Proxy) 16
Database Procedure Proxy 예시 ) CALL DATABASE PROCEDURE ZDPP_OIA_TOPANDFLOP EXPORTING IV_NUMBER = LV_NUMBER IMPORTING ET_TOP = LT_TOP ET_FLOP = LT_FLOP. 17
CDS(Core Data Service) SAP HANA 데이터베이스에서 Data Definition Language (DDL) 문을사용하여 View 를만들고이를 ABAP 에서바로사용가능. OPEN SQL 에서는 Inline View 가허용되지않아서제약사항이많았는데 CDS 에서생성한 View 를사용하여이러한부분을보완. Core Data Service (ABAP -> DDL Source) 18
CDS(Core Data Service) 19
CDS(Core Data Service) 20
CDS(Core Data Service) 기존 OPEN SQL 에서 INLINE VIEW 는불가능 예시 ) SELECT EBELN EBELP MATNR WERKS TXZ01 B~KXTWG INTO CORRESPONDING FIELDS OF IT_ITEM FROM EKPO INNER JOIN (SELECT MATNR,MAX(EXTWG) EXTWG FROM MARA GROUP BY MATNR ) AS B ON B.MATNR = EKPO.MATNR 21
CDS(Core Data Service) CDS 를사용하여 INLINE VIEW 기능가능 예시 ) @ABAPCATALOG.SQLVIEWNAME: 'ZMARA_VW' DEFINE VIEW ZMARA_VIEW AS SELECT MATNR,MAX(EXTWG) EXTWG FROM MARA GROUP BY MATNR. 위와같은형식으로 VIEW 를생성한이후 OPEN SQL 에서바로사용가능 예시 ) SELECT EBELN EBELP MATNR WERKS TXZ01 B~KXTWG INTO CORRESPONDING FIELDS OF IT_ITEM FROM EKPO INNER JOIN ZMARA_VW AS B ON B.MATNR = EKPO.MATNR 22
Ⅲ PERFORMANCE GUIDELINE
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 사용 ) Minimise the number of data transfers (Select Loop 대신에 Join, Subquery, For All Entries 사용 ) Minimise the search overhead ( 적절한보조인덱스를정의하고사용 ) Keep load away from the database (DB 에서많은데이터를 READ 하지않음 ) 이젂처럼중요. 컬럼기반의 SAP HANA 에서는컬럼별로멀티프로세싱작업을하기때문에이젂보다더중요. 중첩된 SELECT 문은 SAP HANA 에서더많은성능저하를일으키기때문에이젂보다더중요. For All Entries 구문사용은맞지않음. SAP HANA 에서는보조인덱스를필요로하지않기때문에이 Rule 은 HANA 에필요없음. SAP HANA 에서는데이터베이스의부담을줄이기보다는데이터베이스내에서의작업이더효율적이기때문에이룰은 HANA 에맞지않음. 24
IV PERFORMANCE TUNIG 예시
PERFORMANCE TUNING 예시 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. 26
PERFORMANCE TUNING 예시 LOOP 안의 SELECT 구문으로인하여레코드건수만큼 SQL 이실행되어성능저하 27
PERFORMANCE TUNING 예시 SELECT ERDAT ERNAM AUDAT VBTYP TRVOG INTO CORRESPONDING FIELDS OF TABLE IT_VBAK FROM VBAK WHERE VBELN IN ( SELECT DISTINCT VBELN FROM VBAP ). Subquery 를사용하여 1 번만 SQL 이실행되어성능개선 28
PERFORMANCE TUNING 예시 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. 29
PERFORMANCE TUNING 예시 FOR ALL ENTRIES 구문으로인하여다수의 SQL 이실행되어성능저하 30
PERFORMANCE TUNING 예시 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. JOIN 를사용하여 1 번만 SQL 이실행되어성능개선 31
PERFORMANCE TUNING 예시 LOOP 안의 DELETE 구문을 Subquery 를사용하여개선 SELECT * APPENDING CORRESPONDING FIELDS OF TABLE IT_EKKO FROM EKKO. SORT IT_EKKO BY BSTYP BSART EBELN. LOOP AT IT_EKKO. SELECT SINGLE PSTYP INTO L_PSTYP FROM EKPO WHERE EBELN EQ IT_EKKO-EBELN. IF L_PSTYP EQ '7'. DELETE IT_EKKO. CONTINUE. ENDIF. ENDLOOP. 32
PERFORMANCE TUNING 예시 LOOP 안의 SELECT 구문으로인하여레코드건수만큼 SQL 이실행되어성능저하 33
PERFORMANCE TUNING 예시 SELECT * APPENDING CORRESPONDING FIELDS OF TABLE IT_TAB FROM EKKO WHERE EBELN NOT IN ( SELECT EBELN FROM EKPO WHERE PSTYP = 7 ). Subquery 를사용하여 1 번만 SQL 이실행되어성능개선 34
PERFORMANCE TUNING 예시 INSERT 구문을 Native SQL 을사용하여개선 SELECT MATNR ERNAM VPSTA PSTAT INTO CORRESPONDING FIELDS OF TABLE IT_MARA FROM MARA. LOOP AT IT_MARA INTO WA_MARA. WA_MARA-AENAM = 'TEST'. APPEND WA_MARA TO IT_MARA2. ENDLOOP. INSERT ZMARA2 FROM TABLE IT_MARA2. 35
PERFORMANCE TUNING 예시 다수의 INSERT 구문실행으로인하여성능저하 36
PERFORMANCE TUNING 예시 EXEC SQL. INSERT INTO ZMARA2 ( MANDT, MATNR, ERNAM, AENAM, VPSTA, PSTAT ) SELECT MANDT, MATNR, ERNAM, 'TEST', VPSTA, PSTAT FROM MARA ENDEXEC. Native SQL 사용으로 1 번만 SQL 이실행되어성능개선 37
PERFORMANCE TUNING 예시 순차적인 SELECT 구문을 Subquery 와 JOIN 을사용하여성능개선 SELECT B~VBELN B~POSNR INTO CORRESPONDING FIELDS OF TABLE IT_VBAP FROM VBAK AS A INNER JOIN VBAP AS B ON A~VBELN = B~VBELN. IT_VBAP_TMP[] = IT_VBAP[]. SORT : IT_VBAP_TMP BY VBELN POSNR. IF NOT IT_VBAP_TMP[] IS INITIAL. SELECT MATNR INTO CORRESPONDING FIELDS OF TABLE IT_LIPS FROM LIPS FOR ALL ENTRIES IN IT_VBAP_TMP WHERE VGBEL = IT_VBAP_TMP-VBELN AND VGPOS = IT_VBAP_TMP-POSNR. ENDIF. 38
PERFORMANCE TUNING 예시 IT_LIPS_TMP[] = IT_LIPS[]. SORT : IT_LIPS_TMP BY MATNR. DELETE ADJACENT DUPLICATES FROM IT_LIPS_TMP COMPARING MATNR. IF NOT IT_LIPS_TMP[] IS INITIAL. SELECT MATNR SPART INTO CORRESPONDING FIELDS OF TABLE IT_MARA FROM MARA FOR ALL ENTRIES IN IT_LIPS_TMP WHERE MATNR = IT_LIPS_TMP-MATNR. ENDIF. 39
PERFORMANCE TUNING 예시 FOR ALL ENTRIES 구문으로인한다수의 SELECT 구문실행으로성능저하 40
PERFORMANCE TUNING 예시 SELECT MATNR SPART INTO CORRESPONDING FIELDS OF TABLE IT_MARA FROM MARA WHERE MATNR IN ( SELECT C~MATNR FROM VBAK AS A INNER JOIN VBAP AS B ON A~VBELN = B~VBELN INNER JOIN LIPS AS C ON C~VGBEL = B~VBELN AND C~VGPOS = B~POSNR ). 41
PERFORMANCE TUNING 예시 Subquery 와 JOIN 을사용하여 1 번만 SQL 이실행되어성능개선 42
PERFORMANCE TUNING 예시 LOOP 안의 COLLECT 구문을 SUM 함수를사용하여개선 SELECT ERDAT NETWR WAERK FROM VBAK INTO TABLE IT_VBAK. LOOP AT IT_VBAK INTO WA_VBAK. MOVE-CORRESPONDING: WA_VBAK TO IT_VBAK2. COLLECT IT_VBAK2. ENDLOOP. 43
PERFORMANCE TUNING 예시 SELECT ERDAT SUM( NETWR ) AS NETWR WAERK FROM VBAK INTO TABLE IT_VBAK2 GROUP BY ERDAT WAERK. SUM 함수를사용하여결과값만을젂송하여성능개선 44
PERFORMANCE TUNING 예시 LOOP 안에서최소값을구하는구문을 CDS 를사용하여성능개선 SELECT EBELN LIFNR BSTYP BSART APPENDING CORRESPONDING FIELDS OF TABLE IT_EKKO FROM EKKO. SORT IT_EKKO BY BSTYP BSART EBELN. LOOP AT IT_EKKO. SELECT MIN( EINDT ) INTO IT_EKKO-EINDT FROM EKET WHERE EBELN = IT_EKKO-EBELN. IF IT_EKKO-EINDT IS INITIAL. DELETE IT_EKKO. CONTINUE. ENDIF. ENDLOOP. 45
PERFORMANCE TUNING 예시 LOOP 안의 SELECT 구문으로인하여레코드건수만큼 SQL 이실행되어성능저하 46
PERFORMANCE TUNING 예시 @ABAPCATALOG.SQLVIEWNAME: 'ZEKET_VW' DEFINE VIEW ZEKET_EINDT AS SELECT EBELN, MIN(EINDT) AS EINDT FROM EKET GROUP BY EBELN ------------------------------------------------------------------------------------------- SELECT A~EBELN A~LIFNR A~BSTYP A~BSART B~EINDT APPENDING CORRESPONDING FIELDS OF TABLE IT_EKKO FROM EKKO AS A INNER JOIN ZEKET_VW AS B ON B~EBELN = A~EBELN. 47
PERFORMANCE TUNING 예시 CDS 를사용하여 1 번의 SQL 실행으로성능개선 48
V SAP HANA APPLIANCE
SAP HANA 어플라이언스 SAP HANA는사젂구성된인증받은어플라이언스제품만이설치가가능함 시스템의안정성, 성능, 확장성, 기술지원요소등을고려한제품선택필요 Hitachi UCP For SAP HANA 구성 50
UCP FOR SAP HANA 특징 1 SAP HANA preloaded by Hitachi 2 3 High-end 스토리지 사용 유일하게최고의안정성을가진 Highend 스토리지사용 스토리지 커넥터 API 사용 Fail-over 시파일 Owner-ship 문제원천봉쇄 간편한업그레이드 모든모델에동일블레이드서버사용 51
VI 제언
제언 반복적인 SQL이사용되는개발방식은지양 Loop 안의 SELECT, For All Entries 구문등 필요할경우 Native SQL 사용 신규기능에대한적절한활용 CDS, Information View 등 Performance 가이드라인준수 OPEN SQL 로안되는경우, 배치프로그램등 53
SAP HANA 에특화된 TOTAL 서비스 SAP HANA 에궁금한사항이있을경우에는? 오승도과장 (his-sdoh@hyosung.com) SAP HANA Community (http://cafe.naver.com/saphana) SAP HANA TOTAL 서비스제공 하드웨어 Pre-Consulting Consulting 안정적이고성능이검증된 SAP HANA 어플라이언스제공 기존시스템진단 Data Sizing 을통한최적의하드웨어모델진단 POC 진행 Performance Tuning SAP HANA 기술지원 SAP HANA 교육 54