2010-03-26 3 views
1

나는 수백만 개의 레코드가있는 테이블을 가지고 있으며 테이블 파티셔닝을 구현하고 있습니다. 그것을보고 우리는 우리가 분할하고자하는 외래 키 "GroupID"를 가지고있다. 이것이 가능한가?SQL 서버 파티셔닝

그룹에 추가 된 항목이 더 많으므로 새 그룹 ID가 추가되면 파티션을 동적으로 만들 수 있습니까?

답변

1

예, 파티셔닝을 사용할 수 있습니다. 예. 새 파티션을 동적으로 만들 수 있습니다. 그것은 업데이 트해야 할 필요가없는 파티션 계획을 사용하는 것이 가장 쉽습니다.

SQL 엔터프라이즈 2005까지 & : 당신이 SQL 개발 버전 또는 엔터프라이즈 버전을 사용하는 경우 2005 년까지이 파티션에 대한 투명한 지원이 포함되어 있습니다

SQL. 동적으로 더 많은 파티션을 추가한다는 것은 새로운 파티션 기능, 새로운 파티션 구성표 및 아마도 새로운 파일 그룹을 만들어야한다는 것을 의미합니다.

당신은 SPLIT 사용하여 파티션 기능을 변경할 수 있습니다 :

ALTER PARTITION FUNCTION MyPartitionFunction() 
SPLIT RANGE (2); 

SQL 2000 또는 SQL 2005 &까지 비 기업 : 그렇지 않으면

여전히 파티션을 사용할 수 있지만 당신이 그것을 할 필요가 옛날 MS SQL 2000 방식. 예전에는 많은 테이블을 물리적으로 생성 한 다음 각 테이블의 UNION ALL 뷰를 작성해야했습니다. 따라서 스키마를 미리 알고 있어야합니다.

이전 파티션 방법에 대한 좋은 소식은 새 파티션을 동적으로 만드는 것이 더 쉽다는 것입니다. 새로운 제약 조건으로 새 테이블을 만들고보기를 업데이트하면됩니다.

그러나 몇 가지 제한 사항이 있지만 파티션 열은 기본 키의 일부 여야합니다. 보기에 직접 삽입하려면 ID 열 (MS SQL에 의해 자동으로 증가되는 열)이 필요하지 않습니다.

+0

2005 표준에는 내장되어 있지 않습니까? –

+0

@durilai : 맞습니다. 예전의 파티션 방법을 사용해야합니다. 엔터프라이즈는 비용이 많이 들고 (일부 사람들에게는 예산이 필요함) 안타깝게도 표준 분할을 포함하지 않습니다. –

+0

@durilai : 이전 파티션 방법에 대한 일반적인 함정을 몇 가지 추가했습니다. –

1

그룹 ID가 파티션에 가장 적합한 항목이 아닐 수 있습니다. 파티셔닝은 롤 창 효과에 적합합니다. 구식 데이터 제거 및 새로운 데이터 롤인을 위해 더 많이 설계되었습니다.

ID를 그룹화하면 그룹을 추가/제거 할 수 있습니다. 데이터의 시간/수명의 요소가 없습니다. 또한 parrtitioned 테이블 당 1000 개의 하드 제한이있어 1000 개의 그룹으로 제한됩니다. 그룹 ID를 추가하려고하므로 고정 숫자로 표시되지 않으면이 하드 한도에 잠재적으로 부딪 힐 수 있습니다.

제한을 1000으로 확장하는 유일한 방법은 여러 개의 분할 된 테이블에 분할 된 뷰를 배치하는 것입니다.

내가 물어볼 질문은 새로운 데이터가 추가되거나 이전 데이터가 제거되고 어떤 기준으로 만들어 지는지 묻는 질문입니다. 테이블이 수백만 행에 불과하기 때문에 파티셔닝의 직접적인 후보가되지는 않습니다. 그래서 나는 질문합니다.

역동적으로 추가하는 측면에서이 기능은 존재하지 않습니다. 새 파일 그룹 할당/다음에 사용되는 파티션 설정 및 파티션 기능 분할을 처리하기 위해 저장 프로 시저 및 논리를 작성해야합니다. 그것은 할 수 있지만 SQL은 당신을 위해 그것을하지 않을 것입니다.

+0

그룹을 분할하는 방법, 여전히 RANGE를 사용합니까? –

+0

int로 파티션 할 수 있으므로 GroupID에 대한 파티셔닝이 좋다. 1000 개가 넘는 그룹을 가질 지, 파티션 당 10 개가되도록 범위를 시작한 다음 중지하고 질문해야하는지 확인해야한다. -이 작업을 수행하면 얻을 수있는 이점 중 하나 인 파티션 제거 만 가능하며 도움이된다는 것을 보여줄 계측 테스트가 없습니다. 이는 일부 쿼리를 방해합니다. – Andrew

+0

동의합니다. 우리는 1000 개가 넘습니다. 우리는 상위 3 개 그룹을 나누고 싶습니다. –