5.3.1 Hash Partition 이란?
- Hash Partition은 Partitioning Key 값에 해시 함수를 적용하여 Data를 분할하는 방식으로 History Data의 관리의 목적 보다는 성능 향상의 목적으로 나온 개념 입니다
- Hash Partition 은 Range Partition 으로 만들기 힘든 사항 즉, 조건을 주기 힘든 경우, 각 파티션 이 고르게 나누어지지 않아 밸런스을 유지하기 힘든 경우라고 판단되는 경우에 유리합니다.
- Hash Partition 의 경우 각각 다른 파티션에 데이터가 고르게 분산시키기 위해서는 반드시 파티션 의 개수를 명시하여야 하며, 파티션의 수를 2 의 거듭 제곱수 (즉, 2,4,8,16 ….)로 설정하여야 합니다.
- NULL 값은 첫 번째 파티션에 위치하게 됩니다.
5.3.2 Hash Partition 예제
① 파티션 테이블 생성
-- 생성 예제 1
CREATE TABLE sales_hash_exam
(sales_no NUMBER,
sale_year CHAR(4) NOT NULL,
sale_month CHAR(2) NOT NULL,
sale_day CHAR(2) NOT NULL,
customer_name VARCHAR2(30),
price NUMBER)
PARTITION BY HASH (sales_no)
PARTITIONS 4 --> 2 의 거듭제곱수로 지정
STORE IN (ASSM_TBS1, ASSM_TBS2, ASSM_TBS3, ASSM_TBS4);
|
-- 생성 예제 2
-- sales_hash1, sales_hash2..와 같이 파티션을 직접 지정 할 수 있다.
-- 하지만 각 파티션에 어떤 데이터가 지정될지 모르므로 무의미 할 수 있다.
CREATE TABLE sales_hash
(sales_no NUMBER,
sale_year CHAR(4) NOT NULL,
sale_month CHAR(2) NOT NULL,
sale_day CHAR(2) NOT NULL,
customer_name VARCHAR2(30),
price NUMBER)
PARTITION BY HASH (sales_no)
( PARTITION sales_hash1 TABLESPACE ASSM_TBS1,
PARTITION sales_hash2 TABLESPACE ASSM_TBS2,
PARTITION sales_hash3 TABLESPACE ASSM_TBS3,
PARTITION sales_hash4 TABLESPACE ASSM_TBS4);
|
위의 Partition Table 은 입력되는 sales_no의 값을 가지고 Hash 함수를 이용하여 각 Row가 저장될 Partition을 내부적으로 결정하게 된다.
② 데이터 조작
아래와 같이 데이터를 INSERT 하고, 데이터가 저장된 파티션을 확인해 보자.
INSERT INTO sales_hash VALUES(1, 2004, 06, 12, ’scott’, 2500);
INSERT INTO sales_hash VALUES(2, 2005, 06, 17, ’jones’, 4300);
INSERT INTO sales_hash VALUES(3, 2005, 12, 12, ’miller’, 1200);
INSERT INTO sales_hash VALUES(4, 2006, 06, 22, ’ford’, 5200);
INSERT INTO sales_hash VALUES(5, 2005, 01, 01, ’lion’, 2200);
INSERT INTO sales_hash VALUES(6, 2006, 12, 22, ’tiger’, 3300);
COMMIT;
|
데이터가 오라클 내부 해쉬 알고리즘에 위해서 파티션이 지정 되었음을 알 수 있다
SELECT sales_no FROM sales_hash PARTITION (sales_hash1); --> 6
SELECT sales_no FROM sales_hash PARTITION (sales_hash2); --> 레코드 없음
SELECT sales_no FROM sales_hash PARTITION (sales_hash3); --> 2,5
SELECT sales_no FROM sales_hash PARTITION (sales_hash4); --> 1,3,4
|
좀 더 자세한 파티션 관리는 오라클 문서의 파티션 관리 표를 참고 하시기 바랍니다
http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10739/partiti.htm#i1007638 | |