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

감귤은탱귤·2024년 1월 30일
0
post-thumbnail

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. 테이블 파티셔닝 수행 예상 시간

파티셔닝 성능은 사용가능한 리소스 및 SAP HANA 구성과 같은 여러 요소에 따라 달라진다.

SAP 에서는 경험적으로 대형 테이블 파티셔닝에 대해서, 10 ~ 100GB/h 시간이 걸린다고 말한다.

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

  • 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. 다중 레벨 파티셔닝

  • Lv1. HASH 유형, Lv2. RANGE 유형을 사용한 다중 레벨 파티셔닝

    ALTER TABLE <TABLE>
    PARTITION BY 
    HASH (<Column1>) PARTITIONS <Partition_Number>,
    RANGE (<Column1>)
    (
    		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 🔰1HASHBELNR
ACDOCA 🔰2RANGEFISCYEARPER
ACCTIT, ACCTHD, ACCTCRHASHAWREF
BALDATHASHLOG_HANDLE
BKPF, BSEG, BSISHASHBELNR
CDHDR, CDPOSHASHOBJECTID, CHANGENR or TABKEY
CE1-, CE4-, CE4-ACCTHASHPAOBJNR
COEPHASHBELNR
COKA, COSBHASHOBJNR
EKPOHASHEBELN
FAGL_SPLINFOHASHBELNR
FAGL_SPLINFO_VALHASHBELNR
JCDS, JESTHASHOBJNR
MATDOCHASHMBLNR
PRCD_ELEMENTSHASHKNUMV
RESBHASHRSNUM
S027, S827HASHMATNR
VBFAHASHRUUID
VEKP, VEPOHASHVENUM



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;
profile
SAP BC (2019 ~ )

0개의 댓글