Q&A

SAP HANA와 S/4HANA Basis 관련한 질문과 답을 나누는 곳입니다.

Re:HANA 세션별 thread 갯수 제한 가능유무

작성자
박성두
작성일
2018-04-02 15:58
조회
3067
안녕하세요. HANA DB 운영자 박성두입니다.

문의하신 내용에 대해서 답변을 보내드립니다.
1번에 대해서 답변으로 Thread 제한 하는 방법으로 파라미터 중에 default_statement_concurrency_limit 가 있습니다.
이 파라미터는 1.0 SPS10이상에서 사용하는 것으로 1개의 DB request에 대해서 최대로 실행 할 수 있는 parallel 숫자 입니다.

statement thread limit를 제한 하는 것은 DB Level에서 요청한 것에 대해서 모든 사용자에게 동일하게 적용되는 방법으로
이것보다 좀더 정확하게 특정 sap사용자에게 thread 수를 제한 하는 방법으로 workload class를 생성해서 생성한 workload class를 sap 사용자에게 매핑하는 방법입니다.
아래 내용을 workload class구성하는 명령어 입니다.

CREATE WORKLOAD CLASS "" SET 'STATEMENT THREAD LIMIT' = ''
메모리와 트래드, 우선순위도 동시에 workload class로 생성할수 있습니다.
CREATE WORKLOAD CLASS "" SET 'PRIORITY' = '', 'STATEMENT THREAD LIMIT' = '', 'STATEMENT MEMORY LIMIT' = ''


The following command can be used for the workload mapping. You can omit properties in the SET clause if you only want to specify a subset:
CREATE WORKLOAD MAPPING "" WORKLOAD CLASS ""
SET 'CLIENT' = '', 'APPLICATION NAME' = '', 'APPLICATION USER NAME' = '', 'USER NAME' = ''

Example: Limiting the maximum thread parallelism for SAP application users SAPBATCH1 and SAPBATCH2 to 30
아래 명령어는 SAPGUI로 접속하는 SAP sapbatch1,2 사용자에게 최대 동시에 사용하는 Thread 수를 30으로 제한 하는 명령어 입니다.
CREATE WORKLOAD CLASS "WLC_30THREAD" SET 'STATEMENT THREAD LIMIT' = '30';
CREATE WORKLOAD MAPPING "WLM_SAPBATCH1" WORKLOAD CLASS "WLC_30THREAD" SET 'APPLICATION USER NAME' = 'SAPBATCH1';
CREATE WORKLOAD MAPPING "WLM_SAPBATCH2" WORKLOAD CLASS "WLC_30THREAD" SET 'APPLICATION USER NAME' = 'SAPBATCH2';

실제로 만드는 과정을 설명을 하면 아래와 같이 사용할 수 있습니다.
create workload class abap_user
, 'STATEMENT MEMORY LIMIT' = '2',
, 'STATEMENT THREAD LIMIT' = '20';
위 내용은 abap_suer라는 workload class를 생성한 내용인데 메모리는 2GB와 statement(SQL쿼리)당 최대 20개 thread를 주는 명령어 입니다.

CREATE WORKLOAD MAPPING "WL_ABAP_MAPPING"
, WORKLOAD CLASS "ABAP_USER"
, SET 'USER NAME' = 'SAPABAP1';
위 내용은 ABAP_USER를 WL_ABAP_MAPPING을 통해 DB user인 SAPABAP1에 매핑하는 명령어 입니다.

CREATE WORKLOAD MAPPING "WL_ABAP_MAPPING"
, WORKLOAD CLASS "ABAP_USER"
, SET 'APPLICATION USER NAME' = 'SAPUSER';
위 내용은 ABAP_USER를 WL_ABAP_MAPPING을 통해 SAP user(sapgui)인 SAPUSER에 매핑하는 명령어 입니다.

답변이 좀 기네요. 테스트를 꼭 개발서버에서 테스트 해보시고 만약에 명령어가 잘 안되면 저에게 연락주세요.

2.번에 대한 답변을 드립니다.
사용 빈도가 낮은 table을 알고 있으면 hana studio에서 unload 할 수 있습니다. 또한 sql command로 unload 할수 있습니다.
그리고 unload된 table이 다시 사용하는 경우(select)하면 다시 메모리로 load하게 됩니다.

HANA Studio -> Catalog -> SAPABAP1 -> Tables -> 테이블 선택후 오른쪽 마우스 클릭 ->Unload from Memory
또다른 방법으로 SQL commnad로 UNLOAD <테이블 이름>
예)UNLOAD ZABC

그리고 한가지 더 붙이자면 table마다 unload되는 우선 순위가 존재합니다.
메모리에서 unload되는 우선순위가 존재하고 unload되는 순서는 가장 오랫동안 사용하는 않는[LRU(Least recently used)] table부터 순서대로 unload 됩니다.
그러나 그 순서에도 unload 우선순위(Priority)가 존재하는데 이것은 hana db가 설정한 값으로 가능하면 변경하지 않는게 좋은데 정말 사용하지 않는 CBO Table(Z*으로 시작하는 TABLE) 이라면 Unload 우선수위를 조정할수 있습니다. 그러나 가능하면 unload 우선순위(Priority)를 수정을 하지 말고 참고만 하시길 바랍니다.

table에 대한 unload 우선 순위는 아래 명령어로 확인 할수 있습니다.
select table_name, unload_priority from sys.tables;

table에 대한 unload 우선순위를 변경하는 명령어
ALTER TABLE "<테이블 이름>" UNLOAD PRIORITY ;

작업하시다가 안되는것이 있으면 저에게 메일(sungudpark@gmail.com)이나 문자 또는 전화(010-3002-0007)로 주세요.

감사합니다.