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
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;