반응형
SAP HANA database의 파티셔닝 기능은 column-store 테이블을 수평으로 분할하여 서로 배타적인 하위 테이블 또는 파티션으로 나누는 기능입니다. 이렇게 하면 큰 테이블을 작고 관리하기 쉬운 부분으로 나눌 수 있습니다. 파티셔닝은 일반적으로 다중 호스트 시스템에서 사용되지만, 단일 호스트 시스템에서도 유용할 수 있습니다.
파티셔닝은 SAP HANA cockpit⁷에서 수행할 수도 있고, SQL 명령어를 사용하여 수행할 수도 있습니다. 파티셔닝은 SQL 쿼리와 데이터 조작 언어(DML) 문장에 대해 투명합니다. 파티셔닝 자체를 위한 추가적인 데이터 정의 문장(DDL)이 있습니다. 예를 들면 다음과 같습니다.
- 테이블 파티션 생성
- 테이블 재파티셔닝
- 파티션을 하나의 테이블로 병합
- 파티션 추가/삭제
- 파티션을 다른 호스트로 이동
- 특정 파티션에 대해 델타 병합 작업 수행
파티셔닝의 장점은 다음과 같습니다.
- 테이블의 크기를 줄여서 메모리 사용량을 감소시킬 수 있습니다.
- 테이블의 로드 밸런싱을 개선할 수 있습니다. 즉, 테이블의 파티션을 다른 호스트에 분산시켜서 병렬 처리를 향상시킬 수 있습니다.
- 테이블의 가용성을 높일 수 있습니다. 즉, 특정 파티션이나 호스트에 장애가 발생하더라도 다른 파티션과 호스트는 정상적으로 작동할 수 있습니다.
파티셔닝의 종류는 다음과 같습니다.
- 단일 레벨 파티셔닝: 테이블을 하나의 열에 따라 파티션으로 나누는 방식입니다. 예를 들어, 날짜 열에 따라 테이블을 월별로 파티션으로 나눌 수 있습니다.
- 다중 레벨 파티셔닝: 테이블을 두 개 이상의 열에 따라 파티션으로 나누는 방식입니다. 예를 들어, 날짜 열과 지역 열에 따라 테이블을 월별, 지역별로 파티션으로 나눌 수 있습니다.
- 이종 파티셔닝: 테이블을 다른 파티셔닝 방식으로 나누는 방식입니다. 예를 들어, 테이블을 먼저 해시 파티셔닝으로 나눈 후, 각 파티션을 다시 범위 파티셔닝으로 나눌 수 있습니다.
파티셔닝을 수행하기 위해서는 다음과 같은 고려사항이 있습니다.
- 파티셔닝할 테이블의 크기와 행 수를 확인합니다. 일반적으로 2억 행 이상이거나 1.5GB 이상의 테이블은 파티셔닝의 후보가 될 수 있습니다.
- 파티셔닝할 테이블의 엑세스 패턴을 분석합니다. 즉, 어떤 열이 자주 쿼리나 조인의 조건절에 사용되는지, 어떤 열이 데이터의 분포도가 높은지, 어떤 열이 데이터의 성격이 다른지 등을 확인합니다.
- 파티셔닝할 테이블의 파티션 수와 방식을 결정합니다. 파티션 수는 테이블의 크기와 행 수, 시스템의 호스트 수, 병렬 처리의 효율 등을 고려하여 적절하게 정합니다. 파티션 방식은 테이블의 엑세스 패턴과 데이터의 분포도, 성격 등을 고려하여 적절하게 정합니다.
- 파티셔닝할 테이블의 파티션 위치를 결정합니다. 즉, 테이블의 파티션을 어떤 호스트에 배치할지를 결정합니다. 이때, 로드 밸런싱과 가용성을 고려하여 파티션을 분산시키는 것이 좋습니다.
파티셔닝의 예시는 다음과 같습니다.
- EDIDS라는 테이블이 있습니다. 이 테이블은 3.1억 행의 데이터를 가지고 있으며, MANDT, DOCNUM, LOGDAT, LOGTIM, COUNTR이라는 5개의 열로 구성되어 있습니다. 이 테이블은 현재 21개의 파티션으로 나누어져 있으며, 각 파티션은 5개의 열을 모두 포함하고 있습니다. 이 테이블은 DOCNUM 열이 자주 쿼리나 조인의 조건절에 사용되는 것을 확인하였습니다. 따라서, 이 테이블을 DOCNUM 열에 따라 7개의 파티션으로 재파티셔닝하고, 각 파티션을 다른 호스트에 분산시키기로 하였습니다.
- 다음과 같은 SQL 명령어를 사용하여 재파티셔닝을 수행합니다.
ALTER TABLE EDIDS PARTITION BY HASH (DOCNUM) PARTITIONS 7;
- 다음과 같은 SQL 명령어를 사용하여 파티션의 위치를 변경합니다.
ALTER TABLE EDIDS MOVE PARTITION 1 TO 'host1';
ALTER TABLE EDIDS MOVE PARTITION 2 TO 'host2';
ALTER TABLE EDIDS MOVE PARTITION 3 TO 'host3';
ALTER TABLE EDIDS MOVE PARTITION 4 TO 'host4';
ALTER TABLE EDIDS MOVE PARTITION 5 TO 'host5';
ALTER TABLE EDIDS MOVE PARTITION 6 TO 'host6';
ALTER TABLE EDIDS MOVE PARTITION 7 TO 'host7';
- 이렇게 하면, EDIDS 테이블은 DOCNUM 열에 따라 7개의 파티션으로 나누어져 있으며, 각 파티션은 다른 호스트에 배치되어 있습니다. 이는 테이블의 메모리 사용량을 줄이고, 테이블의 로드 밸런싱과 가용성을 높이고, 테이블의 성능을 향상시킬 수 있습니다.
예시
//파티셔닝 테이블 조회
SELECT * FROM M_TABLE_PARTITIONS WHERE TABLE_NAME='테이블명'
//HASH 파티셔닝
alter table SAPHANADB.PRCD_ELEMENTS PARTITION BY HASH (KNUMV) PARTITIONS 12;
alter table SAPHANADB.MBEWH PARTITION BY HASH (MATNR) PARTITIONS 12;
alter table SAPHANADB.ACCTCR PARTITION BY HASH (AWREF) PARTITIONS 12;
//RANGE RANGE 파티셔닝
ALTER TABLE SAPHANADB.ACDOCA PARTITION BY
RANGE (RBUKRS)
(PARTITION VALUE= 'G111',
PARTITION VALUE= 'R100',
PARTITION VALUE= 'R103',
PARTITION VALUE= 'R106',
PARTITION VALUE= 'R107',
PARTITION OTHERS),
RANGE (GJAHR)
(PARTITION VALUE = '2020',
PARTITION VALUE = '2021',
PARTITION VALUE = '2022',
PARTITION VALUE = '2023',
PARTITION VALUE = '2024',
PARTITION VALUE = '2025',
PARTITION VALUE = '2026',
PARTITION VALUE = '2027',
PARTITION VALUE = '2028',
PARTITION VALUE = '2029',
PARTITION VALUE = '2030',
PARTITION OTHERS)
//파티셔닝 모니터링
SELECT * FROM sys.M_JOB_PROGRESS
반응형
'SAP HANA' 카테고리의 다른 글
HANA DB에서 서비스 계정에 대한 변경 주기 정책 비활성화 (0) | 2024.09.12 |
---|---|
SAPHANA : HANA 서비스 확인하기 (1) | 2023.12.06 |
SAPHANA : Getting Started with SAP HANA 2.0, express edition 3단계 - HANA 설치 (1) | 2023.11.23 |
SAPHANA : Getting Started with SAP HANA 2.0, express edition 2단계 - HANA 설치 파일 (0) | 2023.11.23 |
SAPHANA : Getting Started with SAP HANA 2.0, express edition 1단계 - VM Ware 설치 (0) | 2023.11.23 |