Hash Partition

DB/Oracle 10g 강좌 2009. 10. 31. 08:44

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



  ================================================
    * 데이터베이스 정보공유 커뮤니티 oracleclub.com
    * 강좌 작성자 : 김정식 (oramaster _at_ naver.com)
  ================================================

'DB > Oracle 10g 강좌' 카테고리의 다른 글

Composite Range-Hash Partitioning  (0) 2009.10.31
List Partition  (0) 2009.10.31
Range Partition  (0) 2009.10.31
Partition Table 이란?  (0) 2009.10.31
(10gR2)Full UNDO tablespace  (0) 2009.10.31
Posted by 야동우
,