SAP HANA DB Table 의 최대 레코드 저장 수는 2,147,483,648 건 이다. (약 21억건)
이 값을 넘어서는 레코드는 저장될 수 없기에 최대 레코드 수를 넘어서기 전, 데이터 증가 추세와 지속적으로 데이터가 증가할 것인지를 판단하여 테이블을 파티셔닝 해야 한다.
자세한 정보는 아래 Notes 를 참고하길 바란다.
SAP Notes 2044468 - FAQ: SAP HANA Partitioning
SAP Help Portal - Table Partitioning
아래에서는 간략한 파티셔닝 정보와 파티션 수행 방법, 그리고 SAP 에서 권장하는 테이블 파티셔닝 모범 사례에 대해서 서술한다.
모니터링 뷰
SQL 구문 확인
파티셔닝 성능은 사용가능한 리소스 및 SAP HANA 구성과 같은 여러 요소에 따라 달라진다.
SAP 에서는 경험적으로 대형 테이블 파티셔닝에 대해서, 10 ~ 100GB/h 시간이 걸린다고 말한다.
HASH
파티션 열(키 값) 의 해시 알고리즘을 기반으로 분할
RoundRobin
레코드를 라운드 로빈 방식으로 분할. 열(키 값) 이 필요하지 않다.
Range
사용자가 지정한 범위에 따라 파티션 분할
위 한가지 방식으로만 파티셔닝 되는 경우를 단일 레벨 파티셔닝이라 부르며, 두가지 유형을 사용하여 파티셔닝 하는 것을 다중 레벨 파티셔닝이라 부른다.
다음과 같은 경우, Level1 에서 Hash, Level2 에서 Range 방식으로 다중 레벨 파티셔닝을 구성하였다.
ALTER TABLE <TABLE>
PARTITION BY HASH (<Column>)
PARTITIONS <Partition_Number>;
ALTER TABLE <TABLE>
PARTITION BY ROUNDROBIN
PARTITIONS <Partition_Number>;
특정 값으로 파티셔닝
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
);
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
);
여기서는 주요 테이블에 대해서만 소개한다.
전체 리스트는 아래 SAP Notes 를 참고하기 바란다.
참고 Notes
Table | Type | Columns |
---|---|---|
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 |
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 중 선택
파티션 수 : 운영 환경 및 파티션 목적에 따라 설정
다음 구문을 사용하여 파티셔닝 된 테이블을 다시 병합할 수 있다.
단, 파티션 된 테이블의 전체 데이터가 21억건을 넘을 경우, 데이터 손실이 발생할 수 있으니 유의해야 한다.
ALTER TABLE <TABLE> MERGE PARTITIONS;