송민준의 개발노트

Oracle DB 파티션이란? 본문

DB

Oracle DB 파티션이란?

송민준 2020. 8. 15. 19:18

파티션이란?

- 기업에서 관리하는 데이터는 정말 많은 양을 다루고 있다. 그러다보면 거대한 데이터를 가지고 있는 테이블이 존재하게 되는데(Big Transaction Table) 이는 트러블슈팅이 발생될 경우 심각한 악영향을 미칠 수 있다.

- 이러한 악영향을 예방 및 피해를 줄이고 효율적으로 관리하기 위해 테이블을 작은 단위로 나누는 것을 말한다.

 

파티션의 기능 정의

- 파티션은 대용량의 테이블을 여러개의 데이터 파일로 분리해 저장하는 것을 말한다.

- 테이블의 데이터가 물리적으로 분리되어 데이터 파일에 저장되면 CRUD 수행의 성능이 향상된다.

- 파티션은 각각 파티션 별로 독립적으로 관리될 수 있다. (파티션 별 백업, 복구 및 인덱스 생성 등)

- 파티션은 Oracle DB의 논리적 단위인 테이블 스페이스 간에 이동이 가능하다.

- 데이터를 조회할 떄 데이터의 범위를 줄여서 성능을 향상시킬 수 있다.

 

주의할 점

- 하나의 테이블을 나눠서 관리하기 때문에 세심한 관리가 요구된다.

- 파티션 구성, 관리를 잘못하여 Index Unusable 발생을 주의해야 한다.

- 파티션 키로 나뉜 테이블에 키 조건을 주지 않아 전체에 접근하지 않도록 주의해야 한다.

 

Partition Table 종류

1. Range Partition

- 테이블의 칼럼 중에서 값의 범위를 기준으로 여러 개의 파티션으로 데이터를 나누어 테이블스페이스에 저장하는 것이다.

- 예를 들어 급여가 있다면 급여의 범위를 지정해서 각각 여러 개의 파티션으로 나눈 것이다.

 ( 1000 ~ 3000 은 파티션 1, 3000 ~ 7000 은 파티션 2, 나머지는 파티션 3)

 

2. List Partition

- 특정 값을 기준으로 파티션을 분할하는 방법이다.

- 데이터 분포가 낮지 않고 균등하게 분포되어 있다면 유용하다. ( 예를 들면 부서 같은)

- 단일 칼럼만 가능

 

3. Hash Partition

- DBMS 내부적으로 해시 함수를 사용해서 데이터를 분할한다.

- 결과적으로 Range나 List와는 다르게 DBMS 이 알아서 분할하고 관리하는 것이다.

- 이력관리의 목적보단 성능 향상의 목적에서 나온 개념이다. 일정한 분포를 가진 파티션으로 나누고 균등한 데이터 분포도를 이용한 병렬처리로 퍼포먼스를 향상시킬 수 있다.

 

4. Composite Partition

- 파티션의 칼럼을 Main / Sub로 나누어 분할하는 방식이다.

- 버전에 따라 다양하게 조합 가능하다.( List / List, List / Hash, Rang / Hash 등)

 

 

파티션 인덱스

- 파티션 인덱스는 4가지의 유형의 인덱스를 제공한다. 

 

1. Global Index : 여러 개의 파티션에서 하나의 인덱스를 사용한다.

2. Local INdex : 해당 파티션 별로 각자의 인덱스를 사용한다.

3. Prefixed Index : 파티션 키와 인덱스 키가 동일하다.

4. Non Prefixed Index : 파티션 키와 인덱스 키가 다르다.

'DB' 카테고리의 다른 글

Oracle Analyze란 뭘까?  (0) 2020.09.17
옵티마이저란??  (0) 2020.08.17
테이블의 용량 초기화  (0) 2020.06.01
Nologging  (0) 2020.06.01
Mybatis 동적 쿼리(like 사용 및 가변 컬럼 사용)  (0) 2019.12.27