2014년 7월 23일 수요일

ABAP 튜닝 충고

[출처 : http://www.erpschool.net/ ]                                                    튜닝관련문서 다운


당사에서 약 1개월간 튜닝을 진행하면서 많이 수정하고, 개선했던 부분들을 언급해 보니 참고해 보시길 바랍니다.

1) SQL 문장 분석후 수정
2) 적절한 Index 추가
3) 중복로직 삭제
4) Internal Table 처리방법 수정
5) 기타참고 사항

1) SQL 문장 분석후 수정
주요 포인트는 건처리를 지양 하는 부분에 포커스를 두었습니다.
select single 문은 loop at ~ endloop 사이에는 될수 있는 한 제거 하고,
대상건을 internal table 에 담아서 read table 처리하여 db read time을 줄였습니다.
SQL 에서 where 절에 order by 조건들을 지양하였습니다.
order by 를 없애고, internal table 에 대상건을 넣은후 sort 문을 이용하여 db read time 을 줄였습니다.
Inner Join, Outter Join 문에서 결합 조건이 잘못되어 Full Scan 하는 경우가 있어서 해당 문장의 Join 결합조건에 키필드들을 조건으로 추가하였습니다.
그리고 가장 기본적인 where 절에 key field 가 빠진경우가 있었습니다. 의외로 이러한 key field 가 빠진 구문들이 많았습니다.

2) 적절한 Index 추가
대부분의 튜닝작업에서 큰 효과를 거두는 부분은 적절한 Index를 잡아주는것입니다.
특히나 CBO 프로그램에서 Standard Table 을 읽을때, 기본 index를 타지않게 SQL 문장을 쓰는 경우가 있습니다. (초급자가 코딩한 경우)
Index를 탈수 있게끔 where 절 조건을 정확하게 수정하였고, 조건이 특수하여 index를 탈수 없는경우는 적절한 index를 추가하여 Table Full Scan 하는것을 예방 하였습니다.

3) 중복로직 삭제
이 부분은 프로그램 개발시 정확한 분석없이, 짧은시간에 결과 출력에만 중점을 둔 프로그램들에서 중복로직들이 발견되었습니다.
되풀이 되는 로직들, 특히 동일한 table을 여러곳에서 select single 하는 경우에는 internal 테이블에 대상건을 넣어주고, 필요한 부분에서 read table 문으로 읽게끔 수정하였습니다.
대부분 업무적으로 분석이 잘못되어서 발생한 문제들 이었습니다.
정확한 요구사항분석이 중요하다는 것을 깨닫게 되는 case 입니다.

4) Internal Table 처리방법 수정
loop at ~ endloop 사이에서 select single 사용 지양하고 binary search 옵션을 추가함.
loop at ~ endloop 사이에서 delete 문 사용시 where 조건 제거하여 internal table full scan 하는경우 없앰
key 값이 unique 한 경우 internal 테이블 선언시 SORTED형 테이블로 선언하여 internal table을 full scan 하는 상황을 없앰

5) 기타참고 사항
CBO 프로그램들의 경우 소스내에 BDC 를 수행하는 경우가 있습니다.
이 경우 소스코드를 튜닝하는 것은 한계가 있으므로 필요시 다른방법들은 간구 할수있습니다.
일반적인 SQL 튜닝외에 다른방법들을 언급해 봅니다.

첫번째는 병렬처리 방법입니다.
AP Server 와, DB Server 에서 동시에 병렬로 프로세스를 띄어서 부하분산효과를 누리는 경우입니다.
이 병렬처리 방법은 BC 쪽에서 지원이 필요한 부분이기도 합니다.
예를들어 DIA 프로세스 개수를 더 증가 시켜야 할 경우도 있습니다.
관련 소스는 향후에 공개토록 하겠습니다.

두번째는 Archiving 입니다.
트랜잭션 데이터가 많이쌓이는 테이블을 읽는 프로그램들은 기본적으로 그 대상건이 줄어들면 당연히 속도가 줄게 마련입니다.
Archiving 하여 전반적인 속도를 줄이는것은 단순한 튜닝 수준을 넘어서, 장기적인 관점으로 접근 하여야 합니다.
해당회사의 데이터관리 정책에 우선하여야 하고 최초 비용이 많이들기 때문에 구축후 장기적인 관점에서 유지보수 비용, 데이터 관리 비용의 이점을 살려서 진행하여합니다.
아무튼 Archiving을 한 경우 부수적으로 대상건들이 줄일수 있으므로 Performance 향상을 기대할 수 있습니다.
다만 중요한 것은 Archiving 이후 BC 쪽에서 DB Reorg. 작업을 꼭 해줘야 Size 감소 효과를 볼수 있습니다.

세번째는 하드웨어적인 튜닝입니다.
단순하게 CPU, Memory 를 증설하는 것입니다.
소스 튜닝의 방법으로는 기대하는 수준의 효과를 못보는경우 해볼수 있는 방법입니다.
비용이 발생하기 때문에 쉽게 시도하기는 어려운 부분입니다.

2014년 7월 16일 수요일

무료 폰트(구글/아도비)

[ 출처 : http://www.parkoz.com/ ]

Noto 폰트군중에 CJK(;한중일) 지원하는 Noto Sans CJK 가 추가 공개되었습니다.

디지털기기상에서의 표현과 인쇄를 동시에 고려해 만들어졌으며, 다양한 국가의 문자들을 동시에 여럿 지원할 수 있도록 하는 목표를 가지고 있는 프로젝트인데, Noto sans serif Pan-CJK의 경우 핵심 프로젝트 디자인은 어도비저팬의 료코 니시즈카가 책임을 졌다고 하네요.


다운로드는 링크에 있는 구글 링크나

소스포지에서 받으시면 됩니다.

http://sourceforge.net/adobe/source-han-sans

http://www.google.com/get/noto/#/

스마트폰 푸시알림으로 쉽게 받자

[출처 : http://push.doday.net/api/docs#games]

Introduction

상태알림, 스마트폰 푸시알림으로 쉽게 받자

시스템 관리자를 비롯한 개발자분들, 여러분의 시스템이 발송하는 상태 알림 어떻게 받아보고 있습니까?
시스템의 상태 모니터링이나 스케줄, 배치작업, 특정이벤트 발생 등의 알림을 어떻게 확인하고 계십니까?

이메일? 비용이 들지않아 좋습니다.
하지만 내가 일상적으로 받는 무수히 많은 이메일 속에서 이러한 메일은 파묻혀서 안봅니다.
SMS? 꼬박꼬박 확인한다는 점에서 좋으나, SMS모듈을 적용하려면 이메일발송 기능을 구현하는거보다 복잡합니다. 또한 비용도 청구되고요. 수시로 까먹지 않고 SMS 충전해주어야 합니다.
모니터링앱 직접구축? 발송에 비용이 들지 않고, 확인하기에 편합니다.
그러나 직접 앱을 개발하고, 서버 셋팅하여 apns와 gcm을 직접 구현해야되는점이 가장 큰 장벽입니다.
특히 apns 이용하려면 애플개발자프로그램에 가입해야되고, 매년 apns인증서도 갱신해줘야되고 신경써야할것들이 많습니다.
그래서 개발자분들이 사용하기 쉽도록 push 알림보내는 기능을 RESTful하게 만들었습니다. 다른건 신경쓰지마시고 어디든지 붙여서 쓰세요.
시스템 상태 부터 주문알림 등 무궁무진하게 활용가능합니다.
무료로 제공하니 편하게 구현하여 이용하세요.

How to use

먼저, 푸시큐를 설치합니다. 구글플레이, 앱스토어

푸시알림 보내기

1. 앱에서 그룹을 생성합니다.
2. 앱의 첫화면에서 UUID와 secret_key를 확인합니다.
3. 적절한 곳에서 API를 이용하여 호출합니다.
4. 푸시알림을 받을 사람들에게 그룹코드를 알려주고 등록하도록 요청합니다.
끝.

푸시알림 받기

1. 앱에서 푸시알림받을 그룹코드를 등록합니다.
끝.

API

POST http://push.doday.net/api/push

Parameters

uuid:
string 앱에서 확인가능한 uuid
secret_key:
string 앱에서 확인가능한 secret_key
code:
string 푸시 보낼 타겟 그룹 코드(내가 개설한 그룹만 가능)
body:
string 문자열은 자동으로 길이가 조절되어 발송됩니다.(utf8)

Errors

에러코드 안내
대표 에러코드
9001 : 일치하는 그룹없음
9002 : secret_key 불일치
9003 : 마지막으로 발송한 푸시가 아직 완료되지 않았음
9004 : 알수없는 오류

Response

result:
string success 또는 fail
code:
string 에러 발생시 에러코드
error_description:
string 에러 설명

소스코드

2014년 7월 15일 화요일

이클립스 에서 java 한글 API Document 사용하기

 [출처 : http://alloc.tistory.com/ ]
프로젝트를 생성해보면 JRE 시스템 라이브러리가 있습니다.
거기서 rt.jar 을 우클릭. 특성에 들어가 보시면



































이런 창이 뜹니다.
java  소스 첨부 템에 위치경로가 있을텐데 저부분을 지워주셔야 한글 doc가 적용됩니다.





이제 java api 한글 도큐먼트를 찾아서 압축을 푼다음에 저기에 경로를 지정해주신다음
유효성 검증을 눌러서 저런 팝업이 뜨는지 확인하시면 됩니다.



SAP 멀티 로그인 횟수 제어하기

[출처 : http://yongandju.tistory.com/ ]

SAP 로그인시 최대 로그인 세션을 지정하여 제한하기

◆ Exit으로 제어
  - Function 그룹 : XUSR
  - Module          : EXIT_SAPLSUSF_001
  - INCLUDE       : ZXUSRU01

◆ 제어 조건
  - 동시 접속 4개 이상을 초과시 강제 로그아웃
  - 현재 접속한 내역 안내 팝업창 표시
  - 리스트에 등록한 계정은 중복 로그인 허용

※ 소스보기

2014년 7월 8일 화요일

SAP에서 권한 확인 하기

SAP 권한 체크 로직 추가

SU21에서 권한 OBJECT를 찾는다.




프로그램상에서 해당 권한 OBJECT CHECK 로직 작성

AT SELECTION-SCREEN ON S_WERKS.
  PERFORM CHECK_AUTHORIZATION.




*&---------------------------------------------------------------------*
*&      Form  CHECK_AUTHORIZATION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHECK_AUTHORIZATION .

  DATA : BEGIN OF LT_WERKS OCCURS 0,
         WERKS    LIKE   T001W-WERKS,
         END OF LT_WERKS.

  CLEAR : LT_WERKS, LT_WERKS[].
  SELECT WERKS
    INTO CORRESPONDING FIELDS OF TABLE LT_WERKS
    FROM T001W
   WHERE WERKS IN  S_WERKS.

* "Check Authorization Object
  LOOP AT LT_WERKS.
    AUTHORITY-CHECK OBJECT 'M_MSEG_WMB'
      ID 'ACTVT'  FIELD '03'
      ID 'WERKS'  FIELD LT_WERKS-WERKS.
    IF SY-SUBRC NE 0.
      MESSAGE E003 WITH 'Non-authorized Plant ' LT_WERKS-WERKS ' entered'.
    ENDIF.
  ENDLOOP.

  FREE : LT_WERKS.
ENDFORM.                    " CHECK_AUTHORIZATION
 

 

2014년 7월 5일 토요일

Availability check – Materials Management

[ 출처 : http://scminerp.com/ ]

Availability check – Materials Management (MM)

Availble stock check that is run automatically after each goods movement and which is intended to prevent the book inventory balances of physical stock categories (such as unrestricted-use stock) from becoming negative. The Availability check field in the material master is used to control on how the availability check is carried in SAP system.

There are 2 types of availability check:

1. Availability check for the various stock types in Inventory Management. This checking is carried out automatically and cannot be manually set in the system.

2. Check for the available stocks in Materials Requirement Planning (MRP). The available stocks check in MRP is activated in the material master record by defining “Availability check” field in material master in MRP3 view. This checking can be configured in Customizing for MRP.

Checking Availability of Stock Types

Different stocks in different stock types are checked. It is depending on the movement type:

• In the case of a withdrawal for consumption, unrestricted-use stock is checked.

• In the case of a release from stock in quality inspection, quality inspection stock is checked.

• In the case of consumption of consignment material, consignment stock for unrestricted use is checked.

If you find the issue that the unrestricted-use stock is not equal to available stock in Availability Overview(CO09) or Stock / Requirement List (MD04). It is because the configuration of availability checking in system.

Available Stock in Availability Overview


In Availability Overview (CO09), available QTY calculation is defined in OVZ9 transaction (Availability check control). The availability check is defined in the material master in MRP3 view. (OVZ2 – Checking groups)

Availability check control – OVZ9

Available Stock in Stock / Requirement List

In Stock / Requirement List (MD04), SAP system calculates plant stock. For all storage locations which belong to this plant and which are not excluded from materials planning or are planned separately. The following stocks are grouped together to calculate the plant stock:

• Unrestricted-use stock (UR)

• Stock in quality inspection (QI)

• Unrestricted-use consignment stock

• Consignment warehouse stock in quality inspection

However, you can design whether stock in transfer, blocked stock and restricted-use stock are included in the plant in Customizing for MRP in the IMG activity Availability of Stock in Transfer/Blocked Stock/Restricted Stock (OMI8 – Plant Parameters for Materials Requirement Planning)

What is Checking Rule in OVZ9?

In Available Check Control configuration (OVZ9), you will find Checking Rule information. Checking rule is predifined in SAP system. It is not material specific but it is transaction specific. Also alone checking rule is nothing, checking rule must be assigned to the specific checking group.

Checking Rule Determination – OMCP:










Checking Rule Determination

SPRO → Materials Management → Inventory Management and Physical Inventory → Goods Issue / Transfer Postings Set Up → Dynamic Availability Check → Transaction Code

Checking Rule “A” for Sales Order and “B” for Delivery is pre defined in SAP and based on the availability check which maintained in material master, for example “01″. The checking rule will reflect in sales order then. When sales order is created, system will take the combination “A/01″ as the scope of available check always.