본문 바로가기

IT관련

오라클 파티션테이블 기본개념 정리 (Oracle Partition Table Basics)

오라클 파티션테이블은 하나의 큰 테이블을 물리적으로 나눠놓은 것입니다.

물리적으로 나눠놨지만, 논리적으로는 하나의 테이블로 간주됩니다.

 

 

왼쪽 그림처럼 Sales 테이블에 1월데이터부터 5월데이터까지 하나의 통테이블에 몰아서 넣을수 있습니다.

하지만, 파티션테이블을 사용하게되면 오른쪽 그림처럼 월마다 다른 세그먼트에 Sales 데이터를 나눠서 넣을 수 있습니다.

이렇게 나눠서 넣어놔도 사용자는 1월~5월치 데이터가 마치 하나의 Sales 테이블에 들어있는 것처럼 사용할 수 있습니다.

 

오라클에서는 Object, Segment 라는 개념을 사용합니다. 저장공간을 가지는 개념이 Segment 에 해당합니다.

즉, 위 파티션된 Sales 테이블에서는 5개의 Segment 에 데이터가 나뉘어 들어가게 됩니다.

각각 세그먼트가 다르기 때문에 1월데이터만 압축해서 보관하거나, 5월데이터만 좀더 빠른 디스크에 저장할 수 있습니다.

 

 

♣ 파티션을 사용하는 목적

 

1) 관리의 편의성

 

위 Sales 테이블에서 1월데이터만 삭제하고자 하는 경우, Non-Partitioned 테이블에서는 1월~5월 전체 데이터를 모두 읽어서 1월 데이터만 찾은 다음에 건건히 Delete 작업에 들어갑니다. 하지만, Partitioned 테이블에서는 1월 파티션에 대해 Truncate 또는 Drop 을 해주면 순식간에 작업이 끝납니다.

 

2) 성능

 

인덱스를 사용하는 경우가 아닌 Full Table Scan 을 해서 3월3일 데이터를 찾는다고 가정할 때, Non-Partitioned 테이블에서는 1월~5월 전체 데이터를 모두 읽어야 찾을 수 있습니다. 하지만, Partitioned 테이블에서는 3월 파티션만 뒤져서 3월3일 데이터를 찾을 수 있기 때문에 이 경우 5배는 빠르게 작업을 할 수 있습니다.

또한, Hash 파티션을 사용하는 경우에는 Disk I/O 분산효과가 있기 때문에 I/O 읽기 성능이 향상 됩니다.

 

 

♣ 파티션키 (Partition Key)

 

파티션을 나눌때 기준이 되는 키컬럼(Key Column)을 파티션키라고 부릅니다. 당연히 테이블에 있는 컬럼들 중에서 선택됩니다.

파티션키로는 Lob을 제외한 Number, Date, Varchar 타입이 모두 가능하고, 여러개의 컬럼으로 구성할 수도 있습니다.

 

 

♣ 파티션은 언제 사용하는 것이 좋은가?

 

위의 "파티션을 사용하는 목적" 에 해당되는 경우 사용하면 됩니다. 하지만 너무 작은 테이블에 굳이 파티션을 만들게되면 괜히 불필요한 오버헤드만 생기게 됩니다. 오라클에서는 아래 경우에 파티션을 권장한다고 말합니다.

 

   - 2GB 이상인 테이블

     >> 최소한 크기가 2GB 이상의 테이블의 경우 파티션을 사용하는 것을 고려해볼 필요가 있음.

 

   - 이력 데이터 (Historical Data)

     >> 로그 데이터와 같이 지속적으로 쌓이면서 커지는.. 그리고 과거데이터의 변경은 거의 없는 그런 경우..

 

   - 테이블의 데이터를 여러종류의 스토리지에 나눠서 저장할 필요가 있는 경우

     >> 자주 쓰는 데이터는 고가의 빠른 스토리지에.. 잘 안쓰는 데이터는 저가의 느린 스토리지에 보관하는..

 

 

 

▶ 오라클 파티션 종합 페이지 바로가기