태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Partitioned Table 고찰 Part 2

Posted at 2010.01.06 20:26 // in MSSQL/SQL Server 2005 new Feature // by ancia

안녕하세요 ^^

드디어!! 기다리던 파티션 테이블에 대한 두번째 시간이 돌아왔습니다. 짝짝짝~

사실 DBA들은 연말과 연초에 가장 바쁘지 않나라는 생각해봅니다.
분기별로도 살짝 바쁘긴하죠 ^^;;

이런저런 사정으로 인해 지금에서야 쓰게 되었습니다.

지난번에는 파티션 테이블이 어떤이유로 파생되었는지 각 버전별로 분해(?) 해봤는데요
급 준비된거라 여러가지 언급에 미흡한부분이 살짝 비춰졌습니다만....
 
10번 정도 읽어보면(이전글이 그럴만한 가치가 있냐.. 퍽~).. 이해가 되지 않을까 생각합니다 ㅋ;;


그럼 각설하고 이번 포스팅의 주제인 partitioned table의 예에 대해서 알아보도록 하겠습니다.

들어가기에 앞서 하위 Query 들은 SQL Server 2005 Enterprise 및 Developer edition
동작함을 유의하시고 진행해 보도록 하겠습니다. ^^


Chapter 1 : Partitioned Table 만들기

A. 준비단계
  파티션테이블을 만들기위해 파일그룹을 생성하고 파티션 함수를 만들고 이를 배치하는 과정을 보여줍니다.
즉,
파일그룹 생성 -> 파티션함수 생성 -> 파일그룹 배치

이 과정이 있어야 파티션 테이블을 만들 수 있다는것이지요!!

허나 약간은 생소한 말이 튀어나옵니다. 파티션 함수인데요 이녀석은 각 파티션을 어떠한 기준으로 구분지어서
만들것인지에 대한 정의를 내는녀석이죠!! 즉, 이녀석 자체가 파티션의 경계를 정의 해 준다고 보시면됩니다.
또하나, 보시면 경계를 구분지을때 Left와 Right가 있습니다. 이는 경계 구분자에 대한 소속을 정의하는데요
(어렵죠 ;;;) 쉽게 생각하시면
서울시에서 지하철(Or 기차) 이용자에대한 통계를 산출하기위해 매시간마다 인원을 기록하는 System을
만들었습니다. 그런데 매시 정각에 기록하다보니 꼭~ 그시간에 호차를 옮기시는 분들이 있다는거죠!!
일딴 인원은 적어야하는데 "이사람을 어디 소속에 둘것인가?"에 대한 의문이 생깁니다. 
오기전에 호차에 둘것인지 아니면 옮길 호차에 둘것인지에 대한 구분을
바로 Left와 Right가 정의해준다는것이죠 ^^;

이해가 되시나요? ^^;;
이해가 안되도 상관없습니다. 저의 글발이 부족해서 Orz..
사실 글로 읽는것 보다는 한번 실행해보는것이 훨씬 와닿죠!!

아래의 "B.데이터 행 배치 및 분포보기"의 코드를 실행해보시고 글을 읽어보도록 하겠습니다.
그럼 퍼뜩~ 이해가 될테니까요 ^^

-- create database Ancia
use Ancia;

-- File Group 나누기
ALTER DATABASE Ancia ADD FILEGROUP fg1;
ALTER DATABASE Ancia ADD FILEGROUP fg2;
ALTER DATABASE Ancia ADD FILEGROUP fg3;
ALTER DATABASE Ancia ADD FILEGROUP fg4;
ALTER DATABASE Ancia ADD FILEGROUP fg5;

-- patition Function 만들기
CREATE PARTITION FUNCTION Left_Partition (int) as RANGE LEFT
FOR VALUES (1, 10, 100);

CREATE PARTITION FUNCTION Right_Partition (int) as RANGE RIGHT
FOR VALUES (1, 10, 100);

-- 파티션 배치 확인
SELECT $PARTITION.Left_Partition(10);
SELECT $PARTITION.Right_Partition(10);

-- 파티션 구성표에 파일 그룹 지정 (파일그룹 배치)
-- Primary 파일그룹 전체를 파티션 할때 
CREATE PARTITION SCHEME Primary_Left_Scheme
AS PARTITION Left_Partition 
      ALL TO ([PRIMARY])

-- 여러개의 파일그룹을 하나의 파티션으로 지정할때
CREATE PARTITION SCHEME Different_Left_Scheme
AS PARTITION Left_Partition 
      TO (fg1, fg2, fg3, fg4, fg5) 

--여러개의 파일그룹을 다수의 파티션으로 구분할때 
CREATE PARTITION SCHEME Multiple_Left_Scheme
AS PARTITION Left_Partition 
      TO (fg1, fg2, fg1, fg2) 

B. 데이터 행 배치 및 분포 보기
  자 이제 파티션 테이블에 대한 준비과정이 완료되었습니다. 실제 파티션 테이블을 만들어봐야겠는데요
만드는 방법은 의외로 매우~ 정말로!! 심플합니다.
Create Table의 하위에 ON ~ 절을 이용해서 파티션 타입을 지정해주면되는것이지요!!

그럼 아래의 코드를 실행해보도록 하죠!!
-- 테이블 생성
CREATE TABLE Partitioned_Table
(
col1 INT
,col2 VARCHAR(15)
) ON Primary_Left_Scheme (col1)

--파티션 배치 확인
SELECT $PARTITION.Left_Partition (1)
SELECT $PARTITION.Left_Partition (2)
SELECT $PARTITION.Left_Partition (3)
SELECT $PARTITION.Left_Partition (4)
SELECT $PARTITION.Left_Partition (10)
SELECT $PARTITION.Left_Partition (11)
SELECT $PARTITION.Left_Partition (12)
SELECT $PARTITION.Left_Partition (13)
SELECT $PARTITION.Left_Partition (14)
SELECT $PARTITION.Left_Partition (100)
SELECT $PARTITION.Left_Partition (101)
SELECT $PARTITION.Left_Partition (102)
SELECT $PARTITION.Left_Partition (103)
SELECT $PARTITION.Left_Partition (104)
 
-- 데이터 입력
-- A
INSERT INTO Partitioned_Table VALUES (1,'Description')
-- B
INSERT INTO Partitioned_Table VALUES (2,'Description')
INSERT INTO Partitioned_Table VALUES (3,'Description')
INSERT INTO Partitioned_Table VALUES (4,'Description')
INSERT INTO Partitioned_Table VALUES (10,'Description')
-- C
INSERT INTO Partitioned_Table VALUES (11,'Description')
INSERT INTO Partitioned_Table VALUES (12,'Description')
INSERT INTO Partitioned_Table VALUES (13,'Description')
INSERT INTO Partitioned_Table VALUES (14,'Description')
INSERT INTO Partitioned_Table VALUES (100,'Description')
-- D
INSERT INTO Partitioned_Table VALUES (101,'Description')
INSERT INTO Partitioned_Table VALUES (102,'Description')
INSERT INTO Partitioned_Table VALUES (103,'Description')
INSERT INTO Partitioned_Table VALUES (104,'Description')

-- 데이터 확인
SELECT ps.partition_number
,ps.row_count 
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] = OBJECT_ID('Partitioned_Table')

TIP. 파티션을 정해줬습니다만, 확인할때마다 Select 명령어를 날려서 보는것은
조금 비효율 적으로 보입니다. 실제 실무에서는 거의 사용하지 않는파티션 테이블이지만
확인하는 방법의 Tip이 있습니다. 바로바로 SystemView를 통해서  볼 수 있는데요
아래와 같죠 ^^

SELECT * FROM SYS.PARTITION_FUNCTIONS                -- 파티션 함수 정보
SELECT * FROM SYS.PARTITION_PARAMETERS               -- 매개 변수 정보
SELECT * FROM SYS.PARTITION_RANGE_VALUES             -- 경계 구성
SELECT * FROM SYS.PARTITION_SCHEMES                  -- 파티션 구성 정보
SELECT * FROM SYS.DATA_SPACES                        -- 파티션 구성 정보
SELECT * FROM SYS.DESTINATION_DATA_SPACES            -- 개별 파티션 구성 정보
SELECT * FROM SYS.PARTITIONS                         -- 파티션 정보
SELECT * FROM SYS.TABLES                             -- 테이블 분할 정보
SELECT * FROM SYS.INDEXES                            -- 인덱스 분할 정보
SELECT * FROM SYS.INDEX_COLUMNS                      -- 인덱스 컬럼 정보

인덱스 관련은 아직 나오지 않았으니 위에 나열되어있는 쿼리들을 한번씩 실행해보믄 센스!!를
갖춘 당신은 진정한 "열혈 DBA"입니다. ^^


Chapter 2 : Partitioned Table 수정
  파티션 테이블을 운영하다보면 아무래도 경계값의 추가나 수정 그리고 테이블간의 데이터 이동이 불가피
한데요 이를 예를 통해서 살펴 보도록 하겠습니다.

A. 신규 파티션 추가
-- 파티션 배치 확인
SELECT $PARTITION.left_Partition(501)

-- 파티션 추가
ALTER PARTITION FUNCTION Left_Partition()
SPLIT RANGE(500)

-- 파티션 배치 확인
SELECT $PARTITION.Left_Partition(501)
B. 파티션 끼워넣기
--파티션 배치 확인
SELECT $PARTITION.Left_Partition (5)  
SELECT $PARTITION.Left_Partition (1) 
SELECT $PARTITION.Left_Partition (10)

-- 파티션에 새로운 File Group을 생성
ALTER PARTITION SCHEME Primary_Left_Scheme
NEXT USED [PRIMARY]

-- 새로운 파티션을 생성
ALTER PARTITION FUNCTION Left_Partition ()
SPLIT RANGE(5)

--파티션 배치 확인
SELECT $PARTITION.Left_Partition (5) 
SELECT $PARTITION.Left_Partition (1) 
SELECT $PARTITION.Left_Partition (10)

C. 데이터이동
   1. 파티션간 합치기
-- 파티션 테이블 생성
CREATE TABLE multiple_partition
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
) ON Primary_Left_Scheme (col1)

-- 데이터 입력
-- A
INSERT INTO multiple_partition VALUES (1,'Description')
-- B
INSERT INTO multiple_partition VALUES (2,'Description')
INSERT INTO multiple_partition VALUES (3,'Description')
INSERT INTO multiple_partition VALUES (4,'Description')
INSERT INTO multiple_partition VALUES (10,'Description')
-- C
INSERT INTO multiple_partition VALUES (11,'Description')
INSERT INTO multiple_partition VALUES (12,'Description')
INSERT INTO multiple_partition VALUES (13,'Description')
INSERT INTO multiple_partition VALUES (14,'Description')
INSERT INTO multiple_partition VALUES (100,'Description')
-- D
INSERT INTO multiple_partition VALUES (101,'Description')
INSERT INTO multiple_partition VALUES (102,'Description')
INSERT INTO multiple_partition VALUES (103,'Description')
INSERT INTO multiple_partition VALUES (104,'Description')

-- 데이터 확인
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count 
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] = OBJECT_ID('multiple_partition')

-- 파티션 배치 확인
SELECT $PARTITION.Left_Partition (1)
SELECT $PARTITION.Left_Partition (10)
SELECT $PARTITION.Left_Partition (100)
SELECT $PARTITION.Left_Partition (101)

-- 파티션 병합
ALTER PARTITION FUNCTION Left_Partition()
MERGE RANGE (10)

-- 데이터 확인
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count 
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] = OBJECT_ID('multiple_partition')

-- 파티션 배치 확인
SELECT $PARTITION.Left_Partition (1)
SELECT $PARTITION.Left_Partition (10)
SELECT $PARTITION.Left_Partition (100)
SELECT $PARTITION.Left_Partition (101)

  2. 일반 테이블을 파티션 테이블로 옮기기
-- 일반 테이블 생성
CREATE TABLE single_partition
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
) 
-- 데이터 입력
INSERT INTO single_partition VALUES (101,'Description')
INSERT INTO single_partition VALUES (102,'Description')
INSERT INTO single_partition VALUES (103,'Description')
INSERT INTO single_partition VALUES (104,'Description')

-- 파티션 함수 생성
CREATE PARTITION FUNCTION Left_Partition (int) AS RANGE LEFT 
FOR VALUES (1,10,100)

-- 파일그룹 배치
CREATE PARTITION SCHEME Primary_Left_Scheme
AS PARTITION Left_Partition 
      ALL TO ([PRIMARY])

-- 파티션 테이블 생성
CREATE TABLE multiple_partition
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
) ON Primary_Left_Scheme (col1)
-- 데이터 입력
-- A
INSERT INTO multiple_partition VALUES (1,'Description')
-- B
INSERT INTO multiple_partition VALUES (2,'Description')
INSERT INTO multiple_partition VALUES (3,'Description')
INSERT INTO multiple_partition VALUES (4,'Description')
INSERT INTO multiple_partition VALUES (10,'Description')
-- C
INSERT INTO multiple_partition VALUES (11,'Description')
INSERT INTO multiple_partition VALUES (12,'Description')
INSERT INTO multiple_partition VALUES (13,'Description')
INSERT INTO multiple_partition VALUES (14,'Description')
INSERT INTO multiple_partition VALUES (100,'Description')

-- 데이터 확인
SELECT OBJECT_NAME(ps.[object_id]) as name
,ps.partition_number
,ps.row_count 
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] IN (OBJECT_ID('multiple_partition'), OBJECT_ID('single_partition'))
order by name 

-- 데이터 이전
ALTER TABLE single_partition SWITCH TO multiple_partition PARTITION 4

-- 데이터 확인
SELECT OBJECT_NAME(ps.[object_id]) as name
,ps.partition_number
,ps.row_count 
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] IN (OBJECT_ID('multiple_partition'), OBJECT_ID('single_partition'))
order by name 

  3. 파티션테이블에서 파티션 테이블로 이전
-- 파티션 함수 생성
CREATE PARTITION FUNCTION Active_Partition (int) AS RANGE LEFT 
FOR VALUES (1,10,100)

CREATE PARTITION FUNCTION Archive_Partition (int) AS RANGE LEFT 
FOR VALUES (100,200,300)

--파일그룹 배치
CREATE PARTITION SCHEME Active_Scheme
AS PARTITION Active_Partition 
      ALL TO ([PRIMARY])

CREATE PARTITION SCHEME Archive_Scheme
AS PARTITION Archive_Partition 
      ALL TO ([PRIMARY])

-- 테이블 생성
CREATE TABLE active_data
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
) ON Active_Scheme (col1)

CREATE TABLE archive_data
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
) ON Archive_Scheme (col1)

--데이터 입력
-- A
INSERT INTO active_data VALUES (1,'Description')
-- B
INSERT INTO active_data VALUES (2,'Description')
INSERT INTO active_data VALUES (3,'Description')
INSERT INTO active_data VALUES (4,'Description')
INSERT INTO active_data VALUES (10,'Description')
-- C
INSERT INTO active_data VALUES (11,'Description')
INSERT INTO active_data VALUES (12,'Description')
INSERT INTO active_data VALUES (13,'Description')
INSERT INTO active_data VALUES (14,'Description')
INSERT INTO active_data VALUES (100,'Description')

-- A
INSERT INTO archive_data VALUES (200,'Description')
-- B
INSERT INTO archive_data VALUES (300,'Description')
-- C
INSERT INTO archive_data VALUES (400,'Description')

-- 데이터 확인
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count 
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] IN (OBJECT_ID('active_data'),OBJECT_ID('archive_data'))

-- 데이터 이전
ALTER TABLE active_data SWITCH PARTITION 3 TO archive_data PARTITION 1

-- 데이터 확인
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count 
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] IN (OBJECT_ID('active_data'),OBJECT_ID('archive_data'))

  4. 파티션 데이터를 일반 테이블로 이전
-- 파티션 함수 생성
CREATE PARTITION FUNCTION Active_Partition (int) AS RANGE LEFT 
FOR VALUES (1,10,100)

-- 파일그룹 배치
CREATE PARTITION SCHEME Active_Scheme
AS PARTITION Active_Partition 
      ALL TO ([PRIMARY])

-- 테이블 생성
CREATE TABLE active_data
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
) ON Active_Scheme (col1)

CREATE TABLE archive_data
(
col1 INT PRIMARY KEY CLUSTERED
,col2 VARCHAR(15)
) 

-- 데이터 입력
INSERT INTO active_data VALUES (1,'Description')
INSERT INTO active_data VALUES (2,'Description')
INSERT INTO active_data VALUES (3,'Description')
INSERT INTO active_data VALUES (4,'Description')
INSERT INTO active_data VALUES (10,'Description')
INSERT INTO active_data VALUES (11,'Description')
INSERT INTO active_data VALUES (12,'Description')
INSERT INTO active_data VALUES (13,'Description')
INSERT INTO active_data VALUES (14,'Description')
INSERT INTO active_data VALUES (100,'Description')

-- 데이터 확인
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count 
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] IN (OBJECT_ID('active_data'),OBJECT_ID('archive_data'))

-- 데이터 이전
ALTER TABLE active_data SWITCH PARTITION 3 TO archive_data 

-- 데이터 확인
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count 
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] IN (OBJECT_ID('active_data'),OBJECT_ID('archive_data'))


자.. 이제 파티션 테이블에 대한 생성과 수정에 대해서 알아봤습니다.
먼가 부족하죠? 이게 끝인가?... 당연히 아니죠!!
DB에 있어서 가장 필요하신분 바로바로 INDEX가 남아있습니다. index역시 테이블과 동일하게 잘게
쪼개서 넣을 수 있는데요 그럼 지금부터 알아보도록 하죠!!

Chapter 2 : Partitioned Index 만들기
  파티션 인덱스는 크게 두가지로 나뉘어지는데요 

  A. 정렬된 인덱스
  B. 정렬되지 않은 인덱스

  딱~봐도 정렬된 인덱스가 먼가 있어보이죠? 이거슨~ 파티션 테이블을 만든 후에 다른 파티션 구성표를
지정하지 않고 인덱스를 만들면 자동으로 정렬된 인덱스가 만들어집니다. 그래서~ 이 녀석을 많이 사용
하는것이지요 ^^

그럼 예제를 통해서 알아보도록 하겠습니다.

A. 정렬된 인덱스 만들기
-- 파티션 함수 만들기
CREATE PARTITION FUNCTION Left_Partition (int) AS RANGE LEFT 
FOR VALUES (1,10,100)

-- 파일그룹 배치
CREATE PARTITION SCHEME Primary_Left_Scheme
AS PARTITION Left_Partition 
    ALL TO ([PRIMARY])

-- 테이블 생성
CREATE TABLE multiple_partition
(
col1 INT 
,col2 VARCHAR(15)
) ON Primary_Left_Scheme (col1)

-- 인덱스 생성
CREATE NONCLUSTERED INDEX cl_multiple_partition ON multiple_partition(col1)

INSERT INTO multiple_partition VALUES (1,'Description')
INSERT INTO multiple_partition VALUES (2,'Description')
INSERT INTO multiple_partition VALUES (3,'Description')
INSERT INTO multiple_partition VALUES (4,'Description')
INSERT INTO multiple_partition VALUES (10,'Description')
INSERT INTO multiple_partition VALUES (11,'Description')
INSERT INTO multiple_partition VALUES (12,'Description')
INSERT INTO multiple_partition VALUES (13,'Description')
INSERT INTO multiple_partition VALUES (14,'Description')
INSERT INTO multiple_partition VALUES (100,'Description')
INSERT INTO multiple_partition VALUES (101,'Description')
INSERT INTO multiple_partition VALUES (102,'Description')
INSERT INTO multiple_partition VALUES (103,'Description')
INSERT INTO multiple_partition VALUES (104,'Description')

-- 데이터 확인
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count 
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] = OBJECT_ID('multiple_partition')

-- 인덱스 확인
SELECT partition_id, index_id FROM sys.partitions pt
WHERE pt.[object_id] = OBJECT_ID('multiple_partition')

B. 정렬되지 않은 비클러스터형 인덱스 만들기
-- 인덱스에 사용할 파티션 함수 생성
CREATE PARTITION FUNCTION Index_Left_Partition (int) AS RANGE LEFT 
FOR VALUES (10,50,100)

-- 테이블에 사용할 파티션 함수 생성
CREATE PARTITION FUNCTION Left_Partition (int) AS RANGE LEFT 
FOR VALUES (1,10,100)

-- 파일그룹 배치
CREATE PARTITION SCHEME Index_primary_Left_Scheme
AS PARTITION Index_Left_Partition 
--Partition must currently exist in database
      ALL TO ([PRIMARY])

CREATE PARTITION SCHEME Primary_Left_Scheme
AS PARTITION Left_Partition 
--Partition must currently exist in database
      ALL TO ([PRIMARY])

-- 테이블 생성
CREATE TABLE multiple_partition
(
col1 INT 
,col2 INT
) ON Primary_Left_Scheme (col1)

-- 정렬되지 않은 index 생성
CREATE NONCLUSTERED INDEX cl_multiple_partition ON multiple_partition(col2)
ON Index_primary_Left_Scheme (col2)

-- 데이터 입력
INSERT INTO multiple_partition VALUES (1,10)
INSERT INTO multiple_partition VALUES (2,10)
INSERT INTO multiple_partition VALUES (3,10)
INSERT INTO multiple_partition VALUES (4,10)
INSERT INTO multiple_partition VALUES (10,50)
INSERT INTO multiple_partition VALUES (11,50)
INSERT INTO multiple_partition VALUES (12,50)
INSERT INTO multiple_partition VALUES (13,50)
INSERT INTO multiple_partition VALUES (14,50)
INSERT INTO multiple_partition VALUES (100,100)
INSERT INTO multiple_partition VALUES (101,100)
INSERT INTO multiple_partition VALUES (102,100)
INSERT INTO multiple_partition VALUES (103,100)
INSERT INTO multiple_partition VALUES (104,100)

-- 데이터 확인
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count 
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] = OBJECT_ID('multiple_partition')
AND p.index_id = 0

--인덱스 확인 
SELECT OBJECT_NAME(ps.[object_id])
,ps.partition_number
,ps.row_count 
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.partitions p
ON ps.partition_id = p.partition_id
AND p.[object_id] = OBJECT_ID('multiple_partition')
AND p.index_id <> 0
정리를하면 인덱스를

동일한 파티션 함수를 써서 정렬되어진 index를 만들것인가
성능향상을위해 새롭게 구분된 파티션 함수를 이용해서 별도의 분할된 index를 만들것인가

흠... 아무래도 실무에 잘 사용하지 않다보니 정렬되지 않은 인덱스를 사용할 일이 있을런지는 ㅋ;;

이로서 Partitioned Table과 index에 대한 정리가 끝났네요 긴글 읽어주셔서 감사합니다.
하위 참고문서에서 많은 정보를 얻을 수 있었습니다.

역시 저는 아직 멀었더군요 이해하는데도 꽤 오래걸렸거든요 ^^;
그럼 다들 고생하시고 2010년 새해에는 정말 좋은 일만 가득한 해피한 한해 되시기 바랍니다.

새해 복 많이 받으세요 ^-^



참고문서
A. http://technet.microsoft.com/ko-kr/magazine/2007.03.partitioning.aspx
B. http://technet.microsoft.com/ko-kr/cc487839.aspx

'MSSQL > SQL Server 2005 new Feature' 카테고리의 다른 글

향상된 인덱싱된 뷰  (0) 2010.01.07
조인힌트  (0) 2010.01.07
Partitioned Table 고찰 Part 2  (3) 2010.01.06
SQL 2000 VS SQL2005 의 인덱스 관련 비교  (0) 2009.12.11
온라인 인덱스 구성(Online Index)  (0) 2009.12.11
미러 백업의 개요  (0) 2009.12.11
  1. 김영대

    2012.05.22 09:52 신고 [수정/삭제] [답글]

    정말 아무것도 모르는 저로서 큰 배움을 받고 갑니다.

    정말 감사드립니다.

  2. 굿

    2012.06.01 18:55 신고 [수정/삭제] [답글]

    저역시 많은 걸 배우고 갑니다 감사드립니다

  3. 질문

    2015.03.18 08:42 신고 [수정/삭제] [답글]

    partition table의 활용도가 어는정도 인지 알수 있을까요??

    oracle 의 경우 몸으로 와닿는 효과를 확인할수 있었습니다 하지만 mssql 같은 경우

    partition 적용시 데이터 용량만 늘어가는거 같다는 느낌이 들었습니다

    제가 이해를 못해서 일까요?

댓글을 남겨주세요.