본문 바로가기

DB/Tibero

[Tibero] Partitioning

파티셔닝 : Table과 Index Data를 Partition 키에 따라 물리적으로 별도의 segment에 저장

 관리적 측면 - 파티션 단위 추가, 삭제, 변경, 백업, 복구

 성능적 측면 - 파티션 단위 조회 및 DML 수행, I/O 분산

1. Table Partitioning

 

Range Partition

 특정 Column Value의 정렬 값을 기준으로 Partitioning

 Historical Data Table에 적합

 주로 날짜 컬럼을 기준으로 함

 Partition 순서대로 정의해야 함

 Interval 정의하여 정해진 간격으로 partition 자동 추가 가능

CREATE TABLE part_range (
empno NUMBER,
regdate date
)
TABLESPACE tbs_part01
PARTITION BY RANGE (regdate) INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
(
PARTITION p201701 VALUES LESS THAN (TO_DATE('20170201', 'YYYYMMDD')) TABLESPACE
tbs_part02,
PARTITION VALUES LESS THAN (MAXVALUE) TABLESPACE tbs_part05
);

 

Hash Partition

 Partition Key의 Hash값에 의한 Partitioning

 데이터 분포가 고른 컬럼을 파티션 기준 컬럼으로 선정해야 효과적

 2의 제곱수로 Partitioning 하는 것이 좋음

 경합 분산 및 병렬쿼리 성능향상 효과

 대용량 거래 Table에 효과적

 Partition 추가 불가

CREATE TABLE part_hash (
empno NUMBER(4),
empname VARCHAR2(20)
)
PARTITION BY HASH (empname) (
PARTITION p_h1 tablespace tbs_part01,
PARTITION p_h2 tablespace tbs_part02
);

List Partition

 특정 Column의 특정 Value로 Partitioning

 분포도가 비슷하며, 많은 SQL에서 해당 Column의 조건이 많이 들 어오는 Column을 Partition Key 로 지정하면 효과적  단일 컬럼만 키로 지정할 수 있음

CREATE TABLE part_list (
name VARCHAR2(20),
location VARCHAR2(20)
)
PARTITION BY LIST(location) (
PARTITION p_seoul VALUES ('SEOUL') TABLESPACE tbs_part03,
PARTITION p_jeju VALUES ('JEJU', NULL) TABLESPACE tbs_part04
);

 

Composite Partition

 주 파티션키에 따라 1차적으로 Data 분배, 서브 파티션 키에 따라 최종적으로 저장할 위치(Segment) 결정

 Range + Hash : 대용량 거래 Table에 좋음

 Range + List : 초대형 이력성 Table을 Range Partitioning하고, 각 파티션을 업무적으로 다시 분할하고자 할 때 주로 이용

Partition Table 관련 Dictionary View

View Name Information
USER_TALBES Table 구조, Partition 유무
USER_PART_TABLES Partition Type, Default values (Partition된 Table의 정보)
USER_TBL_PARTITIONS Partition Details (각 Partition의 정보)
USER_PART_KEY_COLUMNS Partition Key Details

 

Partition 관리

 Partition 추가

-- (Range)
ALTER TABLE table명 ADD PARTITION partition명 VALUES LESS THAN (value) ;
-- (List)
ALTER TABLE table명 ADD PARTITION partition명 VALUES (value) ;



-- 파티션 추가시 LOB 컬럼 테이블 스페이스 지정
ALTER TABLE table명 ADD PARTITION partition명 VALUES LESS THAN ('value')
TABLESPACE 테이블스페이스명
INITRANS 2 PCTFREE 10 MAXTRANS 163 NOCOMPRESS
LOB (LOB컬럼명1) STORE AS (TABLESPACE 테이블스페이스명 ENABLE STORAGE IN ROW NOCACHE NOLOGGING NOCOMPRESS)
LOB (LOB컬럼명2) STORE AS (TABLESPACE 테이블스페이스명 ENABLE STORAGE IN ROW NOCACHE NOLOGGING NOCOMPRESS);

 Partition 삭제

ALTER TABLE table명 DROP PARTITION partition명;

 Partition 병합

ALTER TABLE table명
MERGE PARTITIONS partition명1, partition명2 INTO PARTITION partition명2 UPDATE indexes;

 Partition 분할

ALTER TABLE table명
SPLIT PARTITION partition명2 AT split_key_value
INTO (PARTITION partition명1 tablespace tablespace명1,
PARTITION partition명2 tablespace tablespace명2) ;

 Partition 이름 변경

ALTER TABLE table명 RENAME PARTITION old_partition명 TO new_partition명;

 Partition tablespace 변경

ALTER TABLE table명 MOVE PARTITION partition명 TABLESPACE tablespace명;

-- LOB 컬럼 테이블 스페이스 변경
ALTER TABLE table명 MOVE PARTITION partition명 LOB (LOB컬럼) STORE AS ( TABLESPACE tablespace명 );

 Partition Truncate

ALTER TABLE table명 TRUNCATE PARTITION partition명;

 

2. Index Partitioning

 

Index Partitioning – Global / Local

 Global

- Table Partition Key와 Index Partition Key가 다른 경우

 Local

- Table Partition Key와 Index Partition Key가 같은 경우

- 각 Table Partition과 Index Partition이 서로 1:1 대응 관계가 되도록 DB가 자동 관리

- Table Partition에 변화가 생길 시 Index Partition도 동일하게 변화됨

 

Partition table에서는 Local Index가 Global Index보다 성능, 가용성 및 관리의 용이성 측면에서 우수함.

 

Index Partitioning – Prefixed / Non-prefixed

 Prefixed

- Index 첫 번째 Column이 Index Partition Key와 같은 경우

- Global Index는 Prefixed Index만 지원

 Non-Prefixed

- Index 첫 번째 Column이 Index Partition Key와 다른 경우

 

Partitioned Index 생성 시 Prefixed/Non-Prefixed 정의는 하지 않고, DBMS가 체크하여 Dictionary에 기록하고 관리

CREATE INDEX sales_idx03
ON sales(sale_year)
GLOBAL PARTITION BY RANGE (sale_year)
(PARTITION idx_sales_month_p1 VALUES LESS THAN (04) ,
PARTITION idx_sales_month_p2 VALUES LESS THAN (07) ,
PARTITION idx_sales_month_p4 VALUES LESS THAN (MAXVALUE) );

Partition Index관련 Dictionary View

View Name Information
DBA_INDEXES Index 구조, Partition 유무
DBA_PART_INDEXES Partition Type, Default values (Partition된 Index의 정보)
DBA_IDX_PARTITIONS Partition Details (각 Partition의 정보)
DBA_IDX_COLUMNS Index Column 정보

 

3. Partition Pruning

 Pruning 이란 ?

- 하드파싱이나 실행 시점에 SQL 조건절을 분석하여 읽지 않아도 되는 세그먼트를 액세스 대상에 서 제외하는 기능

 

 정적(Static) Partition Pruning

- Partition Key 컬럼을 상수 조건으로 조회하는 경우

- 쿼리 최적화 시점에 미리 결정

- 실행계획의 PS(Partition Start)와 PE(Partition End) 컬럼에 액세스할 Partition 번호가 출력

 

 동적(Dynamic) Partition Pruning

- Partition Key 컬럼을 Bind 변수로 조회하는 경우

- 실행 시점에 결정 - 실행계획의 PS, PE 컬럼에 ‘KEY’ 라고 표시

'DB > Tibero' 카테고리의 다른 글

[Tibero] ZetaData 기술교육  (1) 2023.12.12
[Tibero] tbrmgr을 이용한 백업 및 복구  (0) 2023.11.30
[Tibero] 티베로 DBA 교육  (0) 2023.11.14
[Tibero] TPR 생성 방법 가이드  (0) 2023.09.01
[Tibero] HA구조, TSC구조, TAC구조  (0) 2023.08.09