'Partitioned Table'에 해당되는 글 3건

  1. 2013.06.19 분할된 테이블 관리(SPLIT, SWITCH, MERGE)
  2. 2013.06.19 분할된 테이블(Ver. GUI) (2)
  3. 2013.06.19 분할된 테이블(Ver. Script)
MS SQL2013.06.19 16:01

 

[내용]

 

분할된 테이블을 관리하는 방법에는 3가지가 있습니다.

첫째, 분할(SPLIT) 입니다. 분할은 기존에 있던 파티션을 나누는 것입니다.

둘째, 전환(SWITCH) 입니다. 전환은 2개의 분할된 테이블이 있을 , 1 테이블의 파티션을 2 테이블의 파티션으로 옮기는 방법 입니다.

마지막, 병합(MERGE) 입니다. 병합은 파티션을 하나로 합치는 방법입니다.

시나리오를 가지고, 분할된 테이블 관리하는 것에 대해 알아보겠습니다.

 

 

[환경]

 

OS: Windows Server 2012

PRODUCT: SQL Server 2012 Ent

 

 

[시나리오]

 

아래와 같이 구성된 테이블을 통하여 분할된 테이블 관리에 대해 알아 봅시다.
(기존 분할된 테이블 구성 참고: http://tshooter.tistory.com/entry/분할된-테이블Ver-Script)

 

기존 분할된 테이블(dbo.Orders)

파티션1

파티션2

파티션3

~ 2011-01-01

2011-01-01~

 

 

새로운 분할된 테이블(dbo.AddOrders)

파티션1

파티션2

~ 2011-01-01

2011-01-01~

 

 

[ACTION]

 

새로운 분할된 테이블을 아래 스크립트를 통하여 생성합니다.

---------------------------------------------------------------------------

-- 파티션 함수 만들기

CREATE PARTITION FUNCTION pf_AddOrderDate (date)

        AS RANGE RIGHT

        FOR VALUES ('2011-01-01' )

GO

 

-- 파티션 구성표 만들기

CREATE PARTITION SCHEME ps_AddOrderDate

   AS PARTITION pf_AddOrderDate

   ALL TO (FG01)

GO

 

-- 분할된 테이블 만들기

CREATE TABLE dbo.AddOrders (

OrderID int NOT NULL,

CustomerID varchar(20),

ProductID char(05),

OrderDate date,

OrderQty int,

UnitPrice int

) ON ps_AddOrderDate(OrderDate)

GO

---------------------------------------------------------------------------

 

 

기존 분할된 테이블을 "~ 2011-01-01", "2011-01-01~2012-01-01", "2012-01-01" 분할(SPLIT)합니다.

아래의 스크립트를 실행합니다.

---------------------------------------------------------------------------

-- 파티션 분할(SPLIT)

ALTER PARTITION FUNCTION pf_OrderDate()

SPLIT RANGE ('2012-01-01')

GO

 

/*스크립트 결과*/

기존 분할된 테이블(dbo.Orders)

파티션1

파티션2

파티션3

~ 2011-01-01

2011-01-01~2012-01-01

2012-01-01~

 

새로운 분할된 테이블(dbo.AddOrders)

파티션1

파티션2

~ 2011-01-01

2011-01-01~

---------------------------------------------------------------------------

 

 

기존 분할된 테이블(dbo.Orders) 파티션1 새로운 분할된 테이블(dbo.AddOrdersDate)으로 전환(SWITCH)합니다.

아래의 스크립트를 실행합니다.

---------------------------------------------------------------------------

-- 파티션 전환(SWITCH)

ALTER TABLE dbo.Orders

SWITCH PARTITION 1

TO dbo.AddOrders PARTITION 1

GO

 

/*스크립트 결과*/

기존 분할된 테이블(dbo.Orders)

파티션1

파티션2

파티션3

 

2011-01-01~2012-01-01

2012-01-01~

 

새로운 분할된 테이블(dbo.AddOrders)

파티션1

파티션2

~ 2011-01-01(+ 2011-01-01 of Orders)

2011-01-01~

---------------------------------------------------------------------------

 

 

기존 분할된 테이블(dbo.Orders) 파티션1 비어 있으므로 파티션2 병합(MERGE) 필요가 있습니다.

아래의 스크립트를 통해 병합을 합니다.

---------------------------------------------------------------------------

-- 파티션 병합(MERGE)

ALTER PARTITION FUNCTION pf_OrderDate()

MERGE RANGE ('2011-01-01')

GO

 

/*스크립트 결과*/

기존 분할된 테이블(dbo.Orders)

파티션1+2

파티션3

2011-01-01~2012-01-01

2012-01-01~

 

새로운 분할된 테이블(dbo.AddOrders)

파티션1

파티션2

~ 2011-01-01(+ 2011-01-01 of Orders)

2011-01-01~

 

---------------------------------------------------------------------------

 

[참고]

 

http://msdn.microsoft.com/ko-kr/library/ms186307.aspx

http://msdn.microsoft.com/ko-kr/library/ms190273.aspx

 

 

 

신고
Posted by TM ~ing
MS SQL2013.06.19 14:20

 

[내용]

 

http://tshooter.tistory.com/entry/분할된-테이블Ver-Script 에서는 스크립트를 통한 신규 분할된 테이블 구성 방법이었습니다. 이번에는 이미 생성되어 있고 데이터가 입력되어 있는 테이블을 UI 통하여 분할하는 방법에 대해 알아보도록 하겠습니다. 하지만,  기존 테이블을 파티셔닝 하는 것은 저장공간 인덱스 유지 보수 면에서 비용이 증가할 있기 때문에 Test 해봐야 합니다.

 

 

[환경]

 

OS: Windows Server 2012

Product: SQL Server 2012 Ent

 

 

[시나리오]

 

2009-03-21 ~ 2012-03-01 데이터를 [~2011-01-01], [2011-01-01~] 개의 파티션으로 구분하여 각각 다른 파일 그룹에 저장할 것입니다. 저장된 테이블에는 이미 데이터가 입력되어 있습니다.

 

(기존 입력된 데이터)

 

(기존 파티션 정보)

 

 

[ACTION]

 

분할하고자 하는 테이블 클릭 - 저장소 - 파티션 만들기 클릭합니다.

 

 

파티션 마법사가 실행 되면, 진행 내용에 대해 읽어 보고 다음을 클릭합니다.

 

 

테이블 분할 , 기준이 (OrderDate) 선택하고 다음을 클릭합니다.

 

 

파티션 함수의 이름을 정의하고 다음을 클릭합니다.

 

 

파티션 구성표의 이름을 정의하고 다음을 클릭합니다.

 

 

파티션에 대한 정보를 입력하고 다음을 클릭합니다.

 

 

입력한 내용의 출력 정보를 선택합니다.

여기에서는 "즉시 실행" 선택하고 다음을 클릭합니다.

 

 

지금 까지 입력했던 요약정보를 확인하고, 마침을 클릭합니다.

 

 

파티션 작성 마법사가 성공적으로 완료된 것을 확인하고닫기를 클릭합니다.

 

 

아래의 스크립트를 통하여, 파티션 구성 정보를 확인합니다.

---------------------------------------------------------------------------

SELECT partition_id, object_id, partition_number, rows

FROM sys.partitions

WHERE OBJECT_ID = OBJECT_ID('dbo.Orders')

ORDER BY partition_number

GO

---------------------------------------------------------------------------

 

 

 

 

[참고]

 

http://msdn.microsoft.com/en-us/library/ms188730.aspx

 

 

 

신고
Posted by TM ~ing
MS SQL2013.06.19 11:05

 

[내용]

 

분할된 테이블(Partitioned Table)이란? 용량의 데이터를 포함하고 있는 테이블을 여러 개의 파티션으로 나누어 저장함으로써 관리의 편의성과 성능의 향상을 위한 테이블을 이야기합니다.

 

예를 들어 10년간의 주문 데이터를 가지고 있는 테이블이 있다. 과거의 주문 기록에 대한 작업은 대부분 조회(SELECT) 작업일 것이고, 최근의 주문 기록은 추가(INSERT) 변경(UPDATE) 작업일 것이다. 데이터에 대한 작업에 따라 테이블을 분할하여 서로 다른 파일 그룹에 저장한다면 성능 향상 관리의 편의성을 가져갈 있을 것입니다.

 

이러한 분할된 테이블을 구성하는 방법은 크게 데이터베이스 파일 그룹 구성, *파티션 함수, *파티션 구성표를 만든 후에야 분할된 테이블을 만들 있습니다. 지금부터 차근차근 분할된 테이블을 구성해 보도록 하겠습니다.

 

*파티션 함수: 분할 영역을 정의하기 위해서 사용됩니다.

*파티션 구성표: 파티션 함수에 의해 분할된 파티션을 어느 파일 그룹에 할당할지 정의하는 역할을 담당합니다.

 

 

[환경]

 

OS: Windows Server 2012

Product: SQL Server 2012 Ent

 

 

[시나리오]

 

2009-03-21 ~ 2012-03-01 데이터를 [~2011-01-01], [2011-01-01~] 두 개의 파티션으로 구분하여 각각 다른 파일 그룹에 저장할 것입니다.

 

 

[ACTION]

 

1. 데이터베이스 만들기

아래의 스크립트를 실행합니다.

---------------------------------------------------------------------------

USE Master

GO

 

--PartionDB01 존재하면 DROP 합니다.

IF DB_ID('PartitionDB01') IS NOT NULL

DROP DATABASE TestDB01

GO

 

--PartionDB01 2개의 파일 그룹으로 생성합니다.

CREATE DATABASE PartitionDB01

ON  PRIMARY (

NAME = 'PartitionDB01',

FILENAME = N'C:\D드라이브\PartitionDB01.mdf'

),

FILEGROUP FG01 DEFAULT (

NAME = 'PartitionDB01_01',

FILENAME = N'C:\E드라이브\PartitionDB01_01.ndf'

)

LOG ON (

NAME = 'PartitionDB01_log',

FILENAME = N'C:\F드라이브\PartitionDB01_log.ldf'

)

GO

---------------------------------------------------------------------------

 

2. 파티션 함수 만들기

아래의 스크립트를 실행 합니다.

---------------------------------------------------------------------------

USE [PartitionDB01]

GO

 

-- 파티션 함수를 주문 날짜 '2011-01-01' 후로 2개의 파티션되도록 생성합니다.

CREATE PARTITION FUNCTION pf_OrderDate (date)

        AS RANGE RIGHT

        FOR VALUES ('2011-01-01')

GO

---------------------------------------------------------------------------

 

3. 파티션 구성표 만들기

아래의 스크립트를 실행 합니다.

---------------------------------------------------------------------------

-- 파티션 구성표를 주문 날짜 '2011-01-01' 이전은 파일그룹 FG01 이후는 PRIMARY 파일 그룹에 저장하도록 생성합니다.

CREATE PARTITION SCHEME ps_OrderDate

   AS PARTITION pf_OrderDate

   TO (FG01, [PRIMARY])

GO

---------------------------------------------------------------------------

 

4. 분할된 테이블 만들기

아래의 스크립트를 실행 합니다.

---------------------------------------------------------------------------

-- 파일그룹은 ps_OrderDATE 구성표를 따르고, 파일 함수 매개변수는 OrderDate 하는 테이블을 생성합니다.

CREATE TABLE dbo.Orders (

OrderID int IDENTITY,

CustomerID varchar(20),

ProductID char(05),

OrderDate date,

OrderQty int,

UnitPrice int

) ON ps_OrderDate(OrderDate)

GO

---------------------------------------------------------------------------

 

5. 분할된 테이블에 데이터를 입력 파티션 정보 확인

아래의 스크립트를 실행 합니다.

---------------------------------------------------------------------------

--8개의 데이터를 입력합니다.

INSERT INTO dbo.Orders VALUES('lee', 'P0002', '2009-03-21', 10, 1000)

INSERT INTO dbo.Orders VALUES('hong', 'P0002', '2009-04-10', 12, 1600)

INSERT INTO dbo.Orders VALUES('kim', 'P0013', '2009-07-19', 16, 5000)

INSERT INTO dbo.Orders VALUES('hong', 'P0001', '2010-09-12', 10, 1000)

INSERT INTO dbo.Orders VALUES('kim', 'P0003', '2011-06-15', 20, 1200)

INSERT INTO dbo.Orders VALUES('park', 'P0021', '2011-10-03', 13, 1500)

INSERT INTO dbo.Orders VALUES('choi', 'P0012', '2012-05-05', 19, 2000)

INSERT INTO dbo.Orders VALUES('lee', 'P0005', '2012-03-01', 15, 3000)

GO

 

-- 파티션 정보를 확인 합니다.

SELECT partition_id, object_id, partition_number, rows

FROM sys.partitions

WHERE OBJECT_ID = OBJECT_ID('dbo.Orders')

ORDER BY partition_number

GO

---------------------------------------------------------------------------

 

파티션 별로 4개씩 데이터 들어가 있습니다.

 

 

 

[참고]

 

http://msdn.microsoft.com/en-us/library/ms188730.aspx

 

 

 

 

신고
Posted by TM ~ing

티스토리 툴바