database.sarang.net
UserID
Passwd
Database
ㆍDBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DBMS Tutorials 452 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 452
파티션의 개념 및 소개
작성자
정재익(advance)
작성일
2002-07-16 10:07
조회수
6,275

파티션의 개념

 

데이터베이스 기술의 발전과 컴퓨터의 활용이 증가하면서 기업이 축적하고 있는 데이터량도 상상할 수 없을 정도로 방대하게 증가하게 되었다. 즉, H/W와 S/W 기술의 발전은 사용자로부터 더 많은 정보요구를 수용하게 되었고, 이렇게 축적된 정보량은 H/W와 S/W의 기술을 위협할 정도로 기하급수적으로 증가하게 되면서 이러한 대용량의 데이터를 안전하고 효율적으로 관리하기 위한 방안이 시급하게 요구되기 시작하였다.

 

요즈음 많은 기업들의 데이터베이스 관리자들은 수백기가바이트에서 테라 바이트에 이를 정도로 방대한 데이터를 관리하기 위해 골머리를 앓고있다. 데이터 액세스 효율성, 안정성 그리고 백업 등등 대용량의 데이터를 관리하기 위해 생각해야 하는 것이 한 두 가지가 아니다.

 

심각한 것은 대용량 데이터 베이스를 유지하고 관리하는 작업이 각 운영자가 단순히 열심히 철야를 하면서 유지하는 차원을 넘어서고 있다는 것이다. 그런데 대용량 데이터 베이스의 실체를 따져보면 실제 증가되는 데이터는 몇 개의 중요 Transaction Table에서 발생되고 있으며 그 이외의 기본 Table에서 데이터의 증가는 아주 미미한 정도다. 기업의 운영을 위한 기본 형태는 이미 정해져 있고 사업방향 및 운영방향에 따라 조금씩 추가되거나, 변경되는 정도 이므로 기본 Table에서 데이터의 급격한 증가는 발생하지 않는다. 그러나 기업의 활동상황을 표현,기록하는 Action Table들은 기업이 영업활동을 계속함에 따라 더욱더 지속적으로 증가하고 있다.

 

기업에서 운영하는 데이터 베이스의 대부분의 형태는 기본 Table을 중심으로 하여 영업(운영) 활동(Transaction)을 기록하고 관리하는 작업이다. 이 Transaction을 관리하는 Action Table은 비록 Table수에 있어서는 전체 데이터 베이스에서 차지하는 비중은 작지만 대부분의 업무가 이들을 경유하게 되고 데이터의 용량에 있어서도 거의 대부분을 차지하게 되므로 이들의 관리 여하에 따라 전체 데이터 베이스의 성능 및 관리작업이 심각한 영향을 받을 수 있다.

 

Partitioning(분할)은 이렇게 용량이 큰(지속적으로 증가하는) Table들을 Partition이라는 보다 작은 단위로 나눔으로써 성능이 저하되는 것을 방지하고 관리를 보다 수월하게 하고자 하는 개념이다.

 

현재 대용량을 다루고 있는 기업들 조차도 파티션을 적극적으로 활용하고 있지 않지만 조만간 파티션은 데이터베이스 기능 중에서 가장 많이 활용되고 가장 중요한 기능으로 자리매김을 하게 될 것이다. 본 연재에서 모든 DBMS의 파티션 기능을 다룰수 없으므로 오라클에서 제공하고 있는 파티션을 중심으로 아래와 같이 8회에 걸쳐 연재하고자 한다.

 

1회 : 파티션의 개념 및 소개 (본글)

2회 : 파티션키의 선정

3회 : 파티션 인덱스

4회 : 파티션의 관리

5회 : 파티션 활용 및 제한사항

6회 : 파티션 병렬처리

7회 : 파티션의 하드웨어적 관리

8회 : 파티션 확장

 

 

1. 파티션의 특징

 

Oracle에서 Table이나 Index에서 Partitioning(분할)을 하게 되면 하나의 Table이 동일한 논리적 속성을 공유하는 여러 개의 단위(Partition)로 나누어 지게 된다. 각 Partition은 열(Column)과 제약조건에 대한 정의를 공유하지만 별도의 SEGMENT로 저장되어 물리적인 속성인 PCTFREE, PCTUSED, INITRANS, MAXTRANS, TABLESPACE 및 STORAGE PARAMETER등은 다르게 지정할 수 있습니다. 이러한 특성으로 인해 Partitioned Table은 다음과 같은 장점이 있습니다.

 

Data 액세스시 범위를 액세스 범위를 줄여 Performance 향상을 가져올 수 있다.

여러 분할 영역으로 나눔으로써 전체 데이터의 훼손 가능성이 감소 하고, Data가용성이 향상된다.

각 분할 영역을 독립적으로 백업하고 복구할 수 있다.

Disk Striping으로 I/O Performance를 향상(Disk 암에 대한 경합의 감소)시킬 수 있다.

Oracle에서 Partition기법은 Version 8.0에서 처음 도입되었고, 이전 Version인 Oracle 7.3는 Partition View만을 지원하였다. Partition View는 큰 Table을 동일한 Template을 가진 여러 개의 다른 Table로 분할하고, Union All을 사용하여 View에서 묶은 형태다. 그러나 Partition View의 경우 관리의 어려움, 활용성의 부족, 성능등에 대한 문제점으로 인하여 잘 이용되지 않는 편이다.

 

Oracle에서 제공하는 Partitioning 방식에는 Range Partitioning (범위분할) , Hash Partitioning (해시분할), Composite Partitioning (조합분할) 의 세가지 Partitioning 방식이 있으며 Version 8.0에서는 Range Partitioning (범위분할) 만 지원되었으나 Oracle8i에서부터 Hash Partitioning (해시분할)과 Composite Partitioning (조합분할)을 지원하고 있다.

 

Range Partitioning (범위분할) : 지정한 열의 값을 기준으로 분할

Hash Partitioning (해시분할) : 해시 함수에 따라 데이터를 분할

Composite Partitioning (조합분할) : 범위분할에 의해 데이터를 분할한 다음 해시 함수를 적용하여 다시 분할하는 방식

 

 

2. 파티션의 종류

 

2-1. Range Partitioning

 

Range Partition(범위 분할)은 Column value의 범위를 기준으로 하여 행을 분할하는 형태로, 테이블 또는 인덱스에 어느 열을 기준으로 분할 할지를 지정하고, 각 분할 영역에서 포함할 Data의 영역을 Define하여 분할하는 방식으로 주로 Historical Data를 관리하는 Table에 적용할 때 유용하게 사용될 수 있다.

 

간단히 예를 들자면 "매출"이라는 Table이 있고 여기에는 몇 년 동안 축적된 자료가 쌓여 있다고 가정해 보자. 우리는 이것을 최근 5년간의 Data만 DB상에서 관리하고 그 이전의 Data는 다른 매체로 BackUp을 받으려고 하며, 또한 주로 Access 되는 대부분의 형태는 금년 및 전년도 Data가 대부분일 때, 우리는 이것은 각 년도별로 또는 각 월별로 분할하여 관리기간 이전 Data만 Backup하여 보관하고 현재 주로 액세스되는 Data를 조회하는 Application의 SQL 액세스 Path를 조정하여 전체 Data가 아닌 최근 정보를 가지고 있는 Partition만을 액세스 하도록 하여 액세스 성능을 향상 시키는 것을 고려해 볼 수 있다.

 

굳이 Partition을 사용하지 않더라도 많은 Site에서 Partition의 개념을 기존 Table에 적용( 매출_1999, 매출_1998, 매출_1997,… 과 같이 년도별로 분할된 Table을 생성하여 저장)하여 사용하고 있지만 사용상에 불편한 점이 많고 액세스 하는 SQL이 복잡해지는 단점이 있었다. Range Partition은 DBMS가 이러한 기능을 지원함으로써 보다 편리하게 사용할 수 있도록 하기 위해 만들어 졌다.

 

Range Partition을 할 때 어느 행을 기준으로 어느 만큼의 값의 범위로 분할 할지를 다음 두 절에서 정하게 된다.

 

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

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

PARTITION BY RANGE에 나타나는 column_list를 Partitioning column이라고 하고 이 값이 Partitioning Key를 형성합니다. 이 Partitioning column은 한 개의 Column만으로 구성할 할 수도 있고 결합인덱스처럼 여러 개의 Column이 지정될 수 도 있습니다(최대 16개 Column을 지원). 여기에 나열된 Column의 값을 기준으로 하여 Table을 나누겠다는 의미이다.

 

VALUES LESS THAN절에서 나타나는 value_list는 Column_list에 표현된 Partitioning Column들에 할당되어 각 Partition의 영역(범위)을 나타내는 값들 이다. 여기서 나타내는 값은 Upper Limit를 표현 하도록 되어 있다. 즉 여기 지정된 값 보다 작은 값들을 저장하겠다는 의미가 된다.

 

즉 두절이 나타내는 의미는 PARTITION BY RANGE절에는 내가 어떤 column들을 기준으로 하여 Partition을 나눌 것인지 지정하게 되고, 각 Partition이 나누어 지는 범위는 VALUES LESS THAN 절에서 지정하여 주는 것이다.

 

아래의 Table 생성 Script는 1997년 Sales Data를 가지고 있는 Table Sales_1997을 분기별로 Partition을 수행하는 예다.

 

CREATE TABLE TS_SALES_1997_RANGE (
    SERIAL          NUMBER        NOT NULL, 
    CODE           VARCHAR2(4), 
    SALE_YEAR     VARCHAR2(4), 
    SALE_MONTH   VARCHAR2(2), 
    SALE_DAY      VARCHAR2(2), 
    PRICE          NUMBER ,
    CONSTRAINT TS_SALES_1997_RANGE_PK
    PRIMARY KEY ( SERIAL ) USING INDEX 
        TABLESPACE PKIS_DATA2 PCTFREE 10
        STORAGE ( INITIAL 256K NEXT 256K PCTINCREASE 50 )) 
 TABLESPACE PKIS_DATA2  PCTFREE 5   PCTUSED 40
   INITRANS 1   MAXTRANS 255
 STORAGE ( 
   INITIAL 2048K NEXT 1024K PCTINCREASE 0
   MINEXTENTS 1 MAXEXTENTS 121 )
   NOCACHE
 PARTITION BY RANGE ( SALE_YEAR, SALE_MONTH, SALE_DAY )
   ( PARTITION TS_SALES_1997_RANGE_Q1 VALUES LESS THAN ('1997', '04', '01' ),
    PARTITION TS_SALES_1997_RANGE_Q2 VALUES LESS THAN ('1997', '07', '01' ),
    PARTITION TS_SALES_1997_RANGE_Q3 VALUES LESS THAN ('1997', '10', '01' ),
	 PARTITION TS_SALES_1997_RANGE_Q4 VALUES LESS THAN ('1998', '01', '01' )
       TABLESPACE PKIS_DATA1  PCTFREE 10  PCTUSED 40
         INITRANS 1   MAXTRANS 255 
       STORAGE (  INITIAL 1M NEXT 1M PCTINCREASE 0
                         MINEXTENTS 1 MAXEXTENTS 121 ) );

 

 

Primary Key 는 물론 Table 생성시 지정하지 않고 Table 생성 후 또는 Data Migration후 아래와 같이 지정하여 사용할 수 도 있다.

 

 ALTER TABLE TS_SALES_1997_RANGE 
   ADD CONSTRAINT TS_SALES_1997_RANGE_PK PRIMARY KEY ( SERIAL )
    USING INDEX 
     TABLESPACE PKIS_DATA2 PCTFREE 10
     STORAGE ( INITIAL 256K NEXT 256K PCTINCREASE 50 );

 

위와 같이 Table을 Partitioning하는 경우 Base Table "TS_SALES_1997_RANGE"에 지정된 물리적 속성 및 Storage Parameter가 Table "TS_SALES_1997_RANGE"에 적용되는 것은 아니다.

 

"TS_SALES_1997_RANGE"은 Table이지만 실제 Segment를 갖지는 않는다. 여기서 지정한 물리적 속성들은 각 Partition들이 생성될 때 개별적으로 물리적 속성을 지정하지 않으면( Partition TS_SALES_1997_RANGE_Q1 ~ TS_SALES_1997_RANGE_Q3 ) TS_SALES_1997_RANGE에서 지정한 속성 값을 적용 받게 되는 것이다. 각 Partition별로 물리적인 속성을 지정하고자 하는 경우에는 Partition TS_SALES_1997_RANGE_Q4와 같이 별도로 지정해 주어야 한다.

 

그러므로, 위의 Script를 이용하여 Table을 생성하면 Partitioned Table TS_SALES_1997_RANGE_Q1 ~ TS_SALES_1997_RANGE_Q3은 Tablespace PKIS_DATA1에 생성이 되고, Partitioned Table TS_SALES_1997_RANGE_Q4는 TableSpace PKIS_DATA2에 생성된다.

 

2-2. Hash Partitioning

 

해시분할은 Partitioning columns의 Partitioning Key 값에 해시 함수를 적용하여 Data를 분할하는 방식으로 History Data의 관리의 목적 보다 성능 향상의 목적으로 나온 개념이다..

 

이력 Data의 범위분할 적용에서 나타나는 단점, 즉 각 Bound(범위)가 포함하는 Data의 양이 일정하지 않아 분포도가 일정하지 않고 각 Partition의 Size가 다르게 나타나는 것을 개선, 일정한 분포를 가진 Partition으로 나누고 균등한 Data 분포도를 이용한 병렬처리로 Performance를 보다 향상 시키고자 하는 개념이다.

 

다음은 Table을 해시분할 하는 것으로 해시분할의 모든 Partition은 동일한 물리적 특성을 가지므로 분할 영역에 대해 지정할 수 있는 유일한 속성은 Tablespace뿐이다.

 

아래의 Table 생성 Script는 1997년 Sales Data를 가지고 있는 Table Sales_1997을 4개의 Partition으로 분리하는 Hash Partition Table을 생성 Script 다.

 

CREATE TABLE TS_SALES_1997_HASH (
    SERIAL  NUMBER        NOT NULL, 
    CODE  VARCHAR2(4), 
    SALE_YEAR  VARCHAR2(4), 
    SALE_MONTH   VARCHAR2(2), 
    SALE_DAY   VARCHAR2(2), 
    PRICE  NUMBER ,
	CONSTRAINT TS_SALES_1997_HASK_PK
    PRIMARY KEY ( SERIAL ) 
      USING INDEX 
        TABLESPACE PKIS_DATA2 PCTFREE 10
        STORAGE ( INITIAL 256K NEXT 256K PCTINCREASE 50 ) ) 
 TABLESPACE PKIS_DATA2
 PARTITION BY HASH ( SALE_YEAR, SALE_MONTH, SALE_DAY )
   ( PARTITION TS_SALES_1997_HASH_Q1 ,
    PARTITION TS_SALES_1997_HASH_Q2 ,
    PARTITION TS_SALES_1997_HASH_Q3 ,
    PARTITION TS_SALES_1997_HASH_Q4 
               TABLESPACE PKIS_DATA1   );

 

Primary Key 는 물론 Table 생성시 지정하지 않고 Table 생성 후 또는 Data Migration후 아래와 같이 지정하여 사용할 수 도 있다.

 

 ALTER TABLE TS_SALES_1997_HASH 
   ADD CONSTRAINT TS_SALES_1997_HASH_PK PRIMARY KEY ( SERIAL )
    USING INDEX 
     TABLESPACE PKIS_DATA2 PCTFREE 10
     STORAGE ( INITIAL 256K NEXT 256K PCTINCREASE 50 );

 

위의 Script에 의해 생성된 Partition Table 은 입력되는 SALE_YEAR, SALE_MONTH, SALE_DAY 세 값을 가지고 Hash 함수를 이용하여 각 Row가 저장될 Partition을 내부적으로 결정하게 된다.

 

Partition Table TS_SALES_1997_HASH_Q1 ~ TS_SALES_1997_HASH_Q3는 Base Table에서 지정한 Tablespace PKIS_DATA2에 저장되고, TS_SALES_1997_HASH_Q4는 따로 지정한 Tablespace PKIS_DATA1에 저장됩니다.

 

Partition TS_SALES_1997_HASH_Q1에 저장되는 Data는 반드시 1/4분기의 Data가 입력되어 있지는 않습니다. Range Partition에서는 사용자가 각 값이 입력될 Partition을 지정해 주었으므로 TS_SALES_1997_RANGE_Q1에 정확히 1/4분기의 DATA가 입력되어 있습니다. 그러나 Hash Partition에서는 어떤 값이 어느 Partition에 저장되라고 지정한 것이 아니라, 전체의 Data를 4개의 Partition으로 나누어 저장하라고 만 지정한 것이다. 그러므로 DBMS는 PARTITION BY HASH절에 지정한 column 값들의 조합을 이용하여 자신의 Logic에 의해 4개의 Partition에 들어갈 값을 정하고 나누어 저장하게 된다. 특정 Partition을 정하여 전체 Data를 찾아보면 다양한 일자의 Data가 저장되어있음을 알 수 있다.

 

분할 영역을 분할, 삭제 및 병합하는 것은 개념적으로 해시 분할 영역에서는 적용되지 않는다. 그러나 ALTER TABLE 에서 ADD 또는 COALESCE를 사용하여 분할영역의 수를 증가 시키거나 감소시킬 수 있다. 또한 ALTER TABLE EXCHANGE PARTITION 을 사용하여 HASH PARTITION 이나 SUBPARTITION 을 NON-PARTITIONED으로 또는 그 반대로 전환할 수 있다.

 

2-3. Composite Partitioning

 

조합분할은 범위 방식을 사용하여 데이터를 분할하고 각각의 분할 영역 내에서 해시 방식을 사용하여 하위를 분할하는 방식으로 이 방식은 Partition Level에서 Historical Data 분할을 지원하고 SubPartition Level에서 병렬처리를 지원하는, 범위분할과 해시분할이 조합된 분할 방식을 말한다.

 

조합분할은 Range와 Hash 두 Partitioning 방식의 장점을 이용하여 만든 개념으로 다음과 같은 작업상의 이점을 얻을 수 있다.

 

범위분할의 장점인 관리의 용이성을 제공한다.

해시분할의 이점인 데이터의 배치 및 병렬화를 제공한다.

하위분할영역에 특정 Tablespace의 이름을 지정할 수 있다.

동일한 Tablespace에 저장된 SubPartition영역에 Local Index를 구축 할 수 있다.

범위분할에서 Base Table은 단지 논리적 구조이며 실제 Data는 분할영역(Partition Table)에 저장된 것과 같이, 조합분할에서도Base Table 및 Partition Table은 단지 분할을 위한 논리적인 구조이며 Data의 저장은 가장 말단인 SubPartition영역에 저장된다.

 

다음 예는 조합분할을 사용하여 테이블을 생성하는 SQL이다.

 

CREATE TABLE TS_SALES_1997_COMP (
    SERIAL         NUMBER        NOT NULL, 
    CODE          VARCHAR2(4), 
    SALE_YEAR     VARCHAR2(4), 
    SALE_MONTH   VARCHAR2(2), 
    SALE_DAY      VARCHAR2(2), 
    PRICE          NUMBER ,
	CONSTRAINT TS_SALES_1997_COMP_PK
    PRIMARY KEY ( SERIAL ) 
      USING INDEX 
        TABLESPACE PKIS_DATA2 PCTFREE 10
        STORAGE ( INITIAL 256K NEXT 256K PCTINCREASE 50 ) ) 
  TABLESPACE PKIS_DATA2
    PCTFREE 5   PCTUSED 40
    INITRANS 1   MAXTRANS 255
  STORAGE ( INITIAL 2048K NEXT 1024K PCTINCREASE 0
    MINEXTENTS 1 MAXEXTENTS 121 ) 
 PARTITION BY RANGE ( SALE_YEAR, SALE_MONTH  )
 SUBPARTITION BY HASH ( SALE_DAY )
 SUBPARTITIONS 8 STORE IN ( PKIS_DATA1, PKIS_DATA2 )
   ( PARTITION SALES_1997_COMP_Q1 VALUES LESS THAN ('1997', '04'),
    PARTITION SALES_1997_COMP_Q2 VALUES LESS THAN ('1997', '07')
               STORE IN ( PKIS_IDX1, PKIS_IDX2 ) ,
    PARTITION TS_SALES_1997_COMP_Q3 VALUES LESS THAN ('1997', '10')
	       ( SUBPARTITION  SALES_1997_COMP_Q3_S1 TABLESPACE PKIS_DATA1,
                 SUBPARTITION  SALES_1997_COMP_Q3_S2 TABLESPACE PKIS_DATA2,
		SUBPARTITION  SALES_1997_COMP_Q3_S3 TABLESPACE PKIS_IDX1,
		SUBPARTITION  SALES_1997_COMP_Q3_S4 TABLESPACE PKIS_IDX2 ,
		 SUBPARTITION  SALES_1997_COMP_Q3_S5 TABLESPACE PKIS_DATA2 ,
		SUBPARTITION  SALES_1997_COMP_Q3_S6 TABLESPACE PKIS_DATA2  ,
		SUBPARTITION SALES_1997_COMP_Q3_S7 TABLESPACE PKIS_IDX2  ,
		SUBPARTITION SALES_1997_COMP_Q3_S8 TABLESPACE PKIS_IDX2 ) ,
    PARTITION TS_SALES_1997_COMP_Q4 VALUES LESS THAN ('1998', '01')
         TABLESPACE PKIS_IDX2   
 		 PCTFREE 10   PCTUSED 40
                  INITRANS 1   MAXTRANS 255 
         STORAGE (  INITIAL 1M NEXT 1M PCTINCREASE 0
                          MINEXTENTS 1 MAXEXTENTS 121 )  );

 

위에서 제시한 Composite Partition Table을 생성하는 Script는 우선 PARTITION BY RANGE ( SALE_YEAR, SALE_MONTH ) 절에 명시된 SALE_YEAR, SALE_MONTH를 Partition Key로 하여 4개의 Range로 분할을 한 다음. SUBPARTITION BY HASH ( SALE_DAY ) 에 의해 범위분할 내에서 입력되는 SALE_DAY를 Hash 함수를 이용하여 다시 8개의 SubPartition으로 분할, 총 32개의 SubPartition 영역으로 나누는 Composite Partitioned Table을 생성한다.

 

Dictionary USER_OBJECTS에 Object_name에 새로 생성한 TS_SALES_1997_COMP을 조건으로 부여하여 조회해 보면, 위에서 설명한 내용을 확인해 볼 수 있다. 추출 결과인 [표 2-1 ]을 살펴보면 총 37개의 object가 생성 되었고, Object_Type을 보면 한 개의 Table(Base Table), 4개의 Table Partition(Range Partition) 및 32개의 Table SubPartition ( 4 * 8 )이 생성되었음을 알 수 있다. 또한 Table 및 Table Partition에는 Data_Object_Id가 없음을 알 수 있다. 실제 Data를 저장하는 Object가 아니라는 뜻으로 Data는 32개의 SubPartition에만 저장되고 이들만이 Table에 할당되는 물리적 속성을 갖는다는 것을 알 수 있다.

 

SELECT OBJECT_NAME, SUBOBJECT_NAME, OBJECT_ID,

DATA_OBJECT_ID, OBJECT_TYPE

FROM USER_OBJECTS

WHERE OBJECT_NAME = 'TS_SALES_1997_COMP';

 

[ 표 2-1 ]

OBJECTNAME	SUBOBJECTNAME	OBJECTID	DATAOBJECT ID	OBJECT_TYPE
TS_SALES_1997_COMP	SYS_SUBP137	24231	24231	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP138	24232	24232	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP139	24233	24233	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP140	24234	24234	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP141	24235	24235	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP142	24236	24236	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP143	24237	24237	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP144	24238	24238	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP145	24239	24239	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP146	24240	24240	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP147	24241	24241	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP148	24242	24242	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP149	24243	24243	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP150	24244	24244	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP151	24245	24245	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP152	24246	24246	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP153	24255	24255	TABLE SUBPARTITION
TS_SALES_1997_COMP	SYS_SUBP154	24256	24256	TABLE SUBPARTITION
	.			
	.			
	.			
TS_SALES_1997_COMP	SALES_1997_COMP_Q3_S1	24247	24247	TABLE SUBPARTITION
TS_SALES_1997_COMP	SALES_1997_COMP_Q3_S2	24248	24248	TABLE SUBPARTITION
TS_SALES_1997_COMP	SALES_1997_COMP_Q3_S3	24249	24249	TABLE SUBPARTITION
TS_SALES_1997_COMP	SALES_1997_COMP_Q3_S4	24250	24250	TABLE SUBPARTITION
TS_SALES_1997_COMP	SALES_1997_COMP_Q3_S5	24251	24251	TABLE SUBPARTITION
TS_SALES_1997_COMP	SALES_1997_COMP_Q3_S6	24252	24252	TABLE SUBPARTITION
TS_SALES_1997_COMP	SALES_1997_COMP_Q3_S7	24253	24253	TABLE SUBPARTITION
TS_SALES_1997_COMP	SALES_1997_COMP_Q3_S8	24254	24254	TABLE SUBPARTITION
TS_SALES_1997_COMP	SALES_1997_COMP_Q4	24230		TABLE PARTITION
TS_SALES_1997_COMP		24226		TABLE

 

 

다음 예는 Partitioned Table에서 Data 조작을 위한 SQL Sample 이다. 위에서 생성한 Range, Hash, Composite Partitioned Table들은 조회 시 아래와 같이 Base Table만을 명시하여 사용 할 수 도 있고, Extended Table name을 명시하여 사용 할 수 도 있다.

 

SELECT

SELECT * FROM TS_SALES_1997_RANGE S

WHERE S.PRICE > 1000;

 

SELECT * FROM TS_SALES_1997_HASH S

WHERE S.PRICE > 1000;

 

SELECT * FROM TS_SALES_1997_RANGE PARTITION (TS_SALES_1997_RANGE_Q1) S

WHERE S.PRICE > 1000;

 

UPDATE

UPDATE TS_SALES_1997_RANGE PARTITION (TS_SALES_1997_RANGE_Q1) S

SET S.SERIAL = 4254480

WHERE S.SERIAL = 425448;

 

DELETE

DELETE FROM TS_SALES_1997_RANGE PARTITION (TS_SALES_1997_RANGE_Q1) S

WHERE S.SERIAL = 4254480;

 

INSERT

INSERT INTO TS_SALES_1997_RANGE PARTITION (TS_SALES_1997_RANGE_Q1)

SELECT * FROM SALES_1997_Q1;

 

INSERT INTO TS_SALES_1997_RANGE PARTITION (TS_SALES_1997_RANGE_Q1)

VALUES (...);

 

INSERT INTO TS_SALES_1997_RANGE PARTITION (TS_SALES_1997_RANGE_Q1)

(SERIAL, ..., PRICE)

VALUES (...);

 

PARTITION LOCK

LOCK TABLE TS_SALES_1997_RANGE PARTITION (TS_SALES_1997_RANGE_Q1) IN EXCLUSIVE MODE;

 

VIEW 생성

CREATE VIEW VW_SALES_1997_RANGE_Q1 AS

SELECT * FROM TS_SALES_1997_RANGE PARTITION (TS_SALES_1997_RANGE_Q1);

 

다음에 연재될 내용은 파티션키의 선정으로 실제 프로젝트에서 파티션을 사용하기 위해서 어떤 부분을 고려해야 되고 주의해야 하는지 방향을 제시할 것이다.

[Top]
No.
제목
작성자
작성일
조회
455APM+Zend 설치하기
정재익
2002-07-18
4284
454Partitioned Table의 Index
정재익
2002-07-16
8903
453파티션키(Partition Key)의 선정
정재익
2002-07-16
7724
452파티션의 개념 및 소개
정재익
2002-07-16
6275
450Fine-Grained Access Control
정재익
2002-07-13
6052
449Data Warehouse 환경에서의 Star Transformation 기술 활용
정재익
2002-07-13
6618
448Bitmap Index에 대한 이해 및 소개
정재익
2002-07-13
8472
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.026초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다