반응형
반응형

 

테이블과 인덱스는 값의 범위를 기준으로 파티션으로 나눌 있습니다. 분할은 크기가 테이블과 인덱스를 쉽게 관리할 있도록 테이블 전체보다는 파티션 단위로 관리하는 것에 초점을 맞추고 있습니다. 그러므로, 값의 범위를 명확히 나눌 있는 테이블의 관리에 편리합니다. 특히, 월별로 데이터를 관리하고 월이 바뀌면 오래된 데이터를 단위로 삭제하는 시스템에는 슬라이딩 윈도우 기법을 적용한다면 데이터를 이동시키는 시간을 줄일 있습니다.

분할 테이블 인덱스의 데이터는 데이터베이스에서 이상의 파일 그룹으로 나눌 있으며, 데이터는 수평적으로 분할됩니다. 단일 인덱스나 테이블의 모든 파티션은 동일 데이터베이스에 상주해야 합니다. 분할된 테이블을 참조하는 쿼리의 작성은 분할되지 않은 테이블을 참조하는 일반 쿼리의 작성과 동일합니다.

 

분할된 테이블 또는 인덱스를 만드는 단계는 다음과 같습니다.

1. 테이블 또는 인덱스의 데이터를 분할하는 기준을 지정하는 파티션 함수를 생성합니다.

2. 파일 그룹과 파티션을 매핑하는 파티션 구성표를 생성합니다.

3. 파티션 구성표를 사용하여 테이블 또는 인덱스를 생성합니다.

 

테이블이나 인덱스를 분할하기 전에 다음과 같은 데이터베이스 개체를 만듭니다.

?         파티션 함수: 특정 열의 값을 기반으로 파티션 집합에 테이블이나 인덱스의 행을 매핑합니다.

?         파티션 구성표: 파티션 함수로 지정된 파티션을 파일 그룹에 매핑합니다.

 

분할된 테이블 인덱스 생성

 

월별로 관리하는 Production.TransactionHistory 테이블이 있다고 가정합니다. 테이블은 2003 10 1부터 2004 2 1까지의 데이터가 있고, 파티션에 한달치의 데이터를 보관한다고 가정합니다. 다음은 시나리오의 스크립트 예제입니다.

 

1.       우선, 파티션의 기준 데이터 값을 정하는 파티션 함수를 생성합니다. LEFT FOR VALUES 또는 RIGHT FOR VALUES 따라 파티션의 왼쪽을 기준으로 정할지 오른쪽을 기준으로 정할지를 결정합니다. Production.TransactionHistory 테이블의 경우, 데이터가 2003 9 1부터 있지만, RIGHT FOR VALUES 설정하여 첫번째 기준을 2003 10 1 정하였습니다.

CREATE PARTITION FUNCTION HistoryPF1 (datetime)

AS RANGE RIGHT FOR VALUES (

'11/01/2003', '12/01/2003', '1/01/2004', '2/01/2004');

GO

 

2.       파티션 구성표를 생성합니다. 파티션 구성표는 파티션의 파일 그룹을 매핑합니다.

CREATE PARTITION SCHEME HistoryPS1

AS PARTITION HistoryPF1

TO (AdventureWorks_FG1, AdventureWorks_FG1

             ,AdventureWorks_FG2, AdventureWorks_FG2, AdventureWorks_FG2);

GO

 

3.       파티션 구성표를 이용하여 분할된 테이블을 생성합니다.

CREATE TABLE Production.TransactionHistory(

            TransactionID int IDENTITY (1, 1) NOT NULL,

           ProductID int NOT NULL,

           ReferenceOrderID int NOT NULL,

           ReferenceOrderLineID int NOT NULL

CONSTRAINT DF_ReferenceOrderLineID DEFAULT (0),

           TransactionDate datetime NOT NULL

CONSTRAINT DF_TransactionDate DEFAULT (GETDATE()),

           TransactionType nchar(1) NOT NULL,

           Quantity int NOT NULL,

           ActualCost money NOT NULL,

           ModifiedDate datetime NOT NULL

CONSTRAINT DF_ModifiedDate DEFAULT (GETDATE()),

           CONSTRAINT CK_TransactionType CHECK (UPPER(TransactionType) IN ('W', 'S', 'P'))

) ON HistoryPS1 (TransactionDate);

GO

 

4.       데이터를 입력합니다.

 

5.       파티션 스키마 이름을 설정하여 분할된 인덱스를 생성합니다.

ALTER TABLE Production.TransactionHistory WITH CHECK ADD

    CONSTRAINT PK_TransactionHistory PRIMARY KEY CLUSTERED

    (

        [TransactionDate],

        [TransactionID]

    )  ON [HistoryPS1] (TransactionDate);

GO

 

6.       분할된 테이블의 정보를 확인합니다.

SELECT OBJECT_NAME(object_id), * FROM sys.partitions

WHERE object_id = OBJECT_ID(' Production.TransactionHistory')

ORDER BY partition_number, index_id;

GO

 

반응형

+ Recent posts

반응형