본문 바로가기

Oracle

파티션 테이블

파티션(분할) 테이블??


테이블 생성시 파티션으로 테이블을 만들수있다.

테이블에있는 특정 칼럼을 기준으로 데이터를 분할하여 저장하는것

이때 논리적 테이블은 1개지만 물리적으로는 분할한 만큼 파티션이 만들어져 입력되는 칼럼값에따라 분할된 파티션 별로 데이터가 저장된다.

(코드상 내가 만든 테이블은 하나지만 실제론 파티션 하나하나가 테이블 역할을 하기때문에 파티션 하나하나마다 저장공간이 필요하니 논리적으로는 테이블이 하나지만 

물리적으로는 파티션만큼의 공간이 생기는것)

사용 목적은 

대용량 테이블의 데이터조회시 효율성과 성능을 높이기 위해 그리고

만약 방대한 테이블의 대부분이 하나의 테이블이고 작은 테이블들이 액새스 받아 사용할때 큰 테이블에 문제가 생기면 아주큰 일이 되므로 작게 분할하여 관리한다.


만약 sales라는 테이블에 90만개의 매출정보 데이터가 있다고 보자 이때 특정 데이터를 찾고자하면 90만건을 다뒤져야한다 인덱스를 사용하더라도 조금 나아질뿐 방대한 데이터를 읽어야함은 그대로다 하지만 만약 판매일자. 판매월에 따라 파티션을 분할해 저장했다면? 

조회시 특정 월을 조건으로 걸면 전체를 보지않고도 쉽게 특정 데이터를 조회할수있다.


예제를 보자


CREATE TABLE SALES( PROD_ID Number(6,0) NOT NULL, CUST_ID Number(6,0) NOT NULL, CHANNEL_ID Number(6,0) NOT NULL, EMPLOYEE_ID Number(6,0) NOT NULL, SALES_DATE Date DEFAULT SYSDATE NOT NULL, SALES_MONTH Varchar2(6 ), QUANTITY_SOLD Number(10,2), AMOUNT_SOLD Number(10,2), CREATE_DATE Date DEFAULT SYSDATE, UPDATE_DATE Date DEFAULT SYSDATE ) PARTITION BY RANGE(SALES_MONTH) ( ... PARTITION SALES_Q1_1998 VALUES LESS THAN ('199804') TABLESPACE MYTS, PARTITION SALES_Q2_1998 VALUES LESS THAN ('199807') TABLESPACE MYTS, PARTITION SALES_Q3_1998 VALUES LESS THAN ('199810') TABLESPACE MYTS, PARTITION SALES_Q4_1998 VALUES LESS THAN ('199901') TABLESPACE MYTS, ... PARTITION SALES_Q4_2003 VALUES LESS THAN ('200401') TABLESPACE MYTS );


파티션이 몇년 분기별로 나뉘어있음을 볼수있다.

VALUES LESS THAN ('199804')은 98년 04월의 미만이라는 이야기니까 아마 이전에 98년 01월의 파티션이있다면

 그 이후부터 04월까지의 데이터를 말하는것이된다.

이렇게 날짜를 기준으로 파티션을 나눈뒤 데이터를 저장해 조회하기도 관리하기도 좋도록 만드는것이 파티션테이블이다.

파티션의 장점

테이블스페이스간의 파티션 이동이 가능하다.

파티션 레벨에서 SELECT, DELETE, UPDATE가 가능

주의 사항

하나의 테이블을 세분화해 관리하기때문에 세심한 주의가 필요

파티션의 구성,관리가 잘못되어 꼬이는 점에 주의

한 테이블당 가능파티션은 약 10000개정도

종류로는 RANGE, LIST, HASH등이 있고 위의 예제는 RANGE(범위)파티션이다.

RANGE

칼럼의 값의 범위를 기준으로 행을 분할한다.

테이블은 논리적 구조일뿐 실제 데이터는 파티션으로 나뉜 테이블스페이스다

ARTITION BY RANGE ( column_list ) : 기본 Table에서 어느 Column을 기준으로 분할할지를 정함

 VALUES LESS THAN ( value_list ) : 각 Partition이 어떤 값의 범위를 포함할지 Upper Bound를 정함.


LIST

파티션 칼럼의 특정 값으로 분할하는 방식

데이터 분포도가 낮지않고 균등히 분포되었을때 유용

다른 파티션처럼 다중 칼럼을 지원하지않고 단일 칼럼만 가능하다.


HASH

파티션 칼럼의 파티션 키값에 HASH함수를 적용해 데이터를 분할

성능향상의 목적으로 나온 파티션

범위 파티션생성시 특정 범위의 분포도가 몰려 각기 사이즈가 다르게되는것을 보완

일정한 분포를 가진 파티션으로 나누고 균등한 데이터분포도를 이용, 병렬처리로 성능을 향상시킨다



파티션을 조사하면서 나온것은 테이블 스페이스


테이블스페이스란??


말뜻만 보면 테이블을 저장하는 공간 같다 비슷하다.


오라클데이터베이스는 데이터가 저장되는 물리적 공간을 가지고 있고 이것은

파일로 저장된다.


오라클 내부에서

데이터 블록(data block), 익스텐트(extent), 세그먼트(segment), 

테이블스페이스(tablespace)라는 논리적인 개념으로 데이터 들을 관리한다.


가장 최소단위가 블록 블록이 모여 익스텐트가 되고 그게모여 세그먼트가 되고 세그먼트가 모여 테이블 스페이스가 된다.


실제 물리적 데이터 파일은 .dbf  , .ora인 파일들은 테이블스페이스라고 보면된다.

 

1개의 테이블 스페이스는 최소 1개의 데이터파일로 구성.


테이블 스페이스에는 테이블 이외에도 인덱스, 프로시저, 뷰등 여러오라클객체가 저장된다.


유형으로 시스템 테이블스페이스, 비시스템 테이블 스페이스가있는데

시스템은 사용자가 건들수없다 

그냥 사용자가 테이블, 인덱스등 데이터를 구축하고 생성하는 과정에서 자동적으로 생성되는 테이블 스페이스.


사용자가 마음대로 할수있는 것은 비시스템 테이블 스페이스 쪽이다

형식 

CREATE TABLESPACE <테이블스페이스명>
    DATAFILE '<데이터 파일명>' SIZE <크기>


보통 파티션을 만드는 예제는 전부 테이블 스페이스를 따로 만든다






'Oracle' 카테고리의 다른 글

트리거  (0) 2018.04.23
PL / SQL  (0) 2018.04.23
6.SQL 함수  (0) 2018.04.22
5.SQL*PLUS명령어  (0) 2018.04.22
4.데이터 구축을 위한 구문들  (0) 2018.04.22