본문 바로가기

카테고리 없음

SAP HANA DB 테이블 파티셔닝 방법

 

SAP HANA DB Table 의 최대 레코드 저장 수는 2,147,483,648 건 이다. (약 21억건)

이 값을 넘어서는 레코드는 저장될 수 없기에 최대 레코드 수를 넘어서기 전, 데이터 증가 추세와 지속적으로 데이터가 증가할 것인지를 판단하여 테이블을 파티셔닝 해야 한다.

자세한 정보는 아래 Notes 를 참고하길 바란다.
SAP Notes 2044468 - FAQ: SAP HANA Partitioning
SAP Help Portal - Table Partitioning

아래에서는 간략한 파티셔닝 정보와 파티션 수행 방법, 그리고 SAP 에서 권장하는 테이블 파티셔닝 모범 사례에 대해서 서술한다.

 


1. 테이블 파티션 간략 정보

1-1. 시스템 내 테이블 파티셔닝 확인

  • 모니터링 뷰
    • PARTITIONED_TABLES
    • TABLE_PARTITIONS
  • SQL 구문 확인
    • SAP Notes 1969700 - SQL Statement Collection for SAP HANA
    • HANA_Tables_ColumnStore_PartitionedTables
    • HANA_Tables_ColumnStore_Partitions

1-2. 테이블 파티셔닝이 추천되는 경우

  • 지속적으로 테이블 성장이 예상되는 경우
  • 레코드가 많은 테이블 (5억건 이상)
  • 메모리 사용량이 많은 테이블
  • 복잡한 쿼리를 처리하는 테이블
  • 핫 데이터(자주 액세스)와 웜 데이터(덜 자주 액세스)가 포함된 테이블

1-3. 테이블 파티셔닝 시 고려해야할 문제

  • 메모리 오버헤드 증가
  • 트랜잭션 데드락 증가
  • CPU 사용량 증가
  • 네트워크 트래픽 증가
  • 테이블 파티셔닝 시, 해당 테이블 독점 잠금으로 인해 작업 중, Select 만 가능

1-4. 테이블 파티셔닝 유형

  • HASH
    파티션 열(키 값) 의 해시 알고리즘을 기반으로 분할
  • RoundRobin
    레코드를 라운드 로빈 방식으로 분할. 열(키 값) 이 필요하지 않다.
  • Range
    사용자가 지정한 범위에 따라 파티션 분할

위 한가지 방식으로만 파티셔닝 되는 경우를 단일 레벨 파티셔닝이라 부르며, 두가지 유형을 사용하여 파티셔닝 하는 것을 다중 레벨 파티셔닝이라 부른다.

다음과 같은 경우, Level1 에서 Hash, Level2 에서 Range 방식으로 다중 레벨 파티셔닝을 구성하였다.

 


2. 테이블 파티셔닝 구문

2-1. HASH 유형

ALTER TABLE <TABLE>
PARTITION BY HASH (<Column>)
PARTITIONS <Partition_Number>;

2-2. RoundRobin 유형

ALTER TABLE <TABLE>
PARTITION BY ROUNDROBIN
PARTITIONS <Partition_Number>;

2-3. Range 유형

ALTER TABLE <TABLE>
PARTITION BY 
RANGE (<Column>)
(
	PARTITION VALUE = '<VALUE1>',
   PARTITION VALUE = '<VALUE2>',
   PARTITION OTHERS
);

 

ALTER TABLE <TABLE>
PARTITION BY 
RANGE (<Column>)
(
	PARTITION '<VALUE_min1>' <= VALUES < '<VALUE_max1>',
   PARTITION '<VALUE_min2>' <= VALUES < '<VALUE_max2>',
   PARTITION OTHERS
);

 

 

ALTER TABLE <TABLE>
PARTITION BY 
RANGE (<Column1>)
(
	PARTITION VALUE = '<VALUE1>',
   PARTITION VALUE = '<VALUE2>',
   PARTITION OTHERS
),
RANGE (<Column2>)
(
	PARTITION '<VALUE_min1>' <= VALUES < '<VALUE_max1>',
   PARTITION '<VALUE_min2>' <= VALUES < '<VALUE_max2>',
   PARTITION OTHERS
);

2-4. 다중 레벨 파티셔닝

  • ALTER TABLE <TABLE>
    PARTITION BY 
    HASH (<Column1>) PARTITIONS <Partition_Number>,
    RANGE (<Column2>)
    (
    		PARTITION VALUE = '<VALUE1>',
    		PARTITION '<VALUE_min1>' <= VALUES < '<VALUE_max1>',
    		PARTITION '<VALUE_min2>' <= VALUES < '<VALUE_max2>',
    		PARTITION OTHERS
    );

 

 

 


3. SAP 권장 테이블 파티셔닝

여기서는 주요 테이블에 대해서만 소개한다.
전체 리스트는 아래 SAP Notes 를 참고하기 바란다.

참고 Notes

  • SAP Notes 2044468 - FAQ: SAP HANA Partitioning -> 27번 항목
  • SAP Notes 2418299 - SAP HANA: Partitioning Best Practices / Examples for SAP Tables
  • SAP Notes 2289491 - Best Practices for Partitioning of Finance Tables

TableTypeColumns

ACDOCA 🔰1 HASH BELNR
ACDOCA 🔰2 RANGE FISCYEARPER
ACCTIT, ACCTHD, ACCTCR HASH AWREF
BALDAT HASH LOG_HANDLE
BKPF, BSEG, BSIS HASH BELNR
CDHDR, CDPOS HASH OBJECTID, CHANGENR or TABKEY
CE1-, CE4-, CE4-ACCT HASH PAOBJNR
COEP HASH BELNR
COKA, COSB HASH OBJNR
EKPO HASH EBELN
FAGL_SPLINFO HASH BELNR
FAGL_SPLINFO_VAL HASH BELNR
JCDS, JEST HASH OBJNR
MATDOC HASH MBLNR
PRCD_ELEMENTS HASH KNUMV
RESB HASH RSNUM
S027, S827 HASH MATNR
VBFA HASH RUUID
VEKP, VEPO HASH VENUM




4. 특정 테이블에 대한 파티셔닝 유형과 열(키 값) 선택

SAP 권장 파티션 테이블에 없거나, CBO 테이블에 대한 파티셔닝은 다음 Notes 를 참고하여 아래 기준을 따르도록 한다.

SAP Notes 3307500 - How to decide which partitioning type and column(s) should been used to partition a table in SAP HANA?
-> Resolution -> General Reocommendation -> B

파티션 유형 : HASH 유형
열(키 값) : Primary Key 중 선택
파티션 수 : 운영 환경 및 파티션 목적에 따라 설정

 


5. 테이블 파티셔닝 병합 구문

다음 구문을 사용하여 파티셔닝 된 테이블을 다시 병합할 수 있다.

단, 파티션 된 테이블의 전체 데이터가 21억건을 넘을 경우, 데이터 손실이 발생할 수 있으니 유의해야 한다.

ALTER TABLE <TABLE> MERGE PARTITIONS;