단일 파일 그룹에서 파티션하기


10

데이터베이스에 매우 큰 테이블이 있지만이 데이터의 상당 부분은 "오래된"것입니다.

통제 할 수없는 상황으로 인해이 "이전"데이터를 제거 할 수 없습니다. 다른 제한 사항은 데이터베이스를 수정할 수 없다는 것입니다. 즉 파일 그룹을 데이터베이스에 추가해야합니다. 현재 상황은 모든 것이 PRIMARY파일 그룹에 있습니다.

이 테이블을 "새", "이전", "아카이브"등과 같은 몇 개의 파티션으로 분할하려고했습니다. 이 목적으로 사용하려는 "상태"열이 있습니다.

설명 된 시나리오와 제한 사항을 감안할 때 분할이 여기에 의미가 있는지 궁금합니다. 다시 말해, 내 테이블이 이런 식으로 분할되었지만 모든 파티션이 동일한 파일 그룹에있는 경우 SQL Server는 내 "새"데이터가있는 기본 파일에서 해당 영역을 찾을 수있을만큼 똑똑하고 "이전"데이터가있는 영역?

달리 말하면, 내 데이터의 80 %가 "오래된"것입니다. SQL Server에는 기본 파일의 100 %에 액세스하지 않고 "새"데이터를 포함하는 20 %에만 액세스 할 수있는 메커니즘이 있습니까 (물론 WHERE쿼리 절에 파티션 열을 지정한다고 가정 ).

이것에 대답하기 위해, 파티셔닝이 내부적으로 어떻게 구현되는지 이해해야 할 것입니다. 나는 어떤 조언을 주셔서 감사합니다.

답변:


6

동일한 파일 그룹에서 테이블을 분할하면 두 가지 장점이 있습니다.

  1. 큰 인덱스의 일부를 증분 재 구축 할 수있어보다 효율적인 유지 관리가 가능합니다. ALTER INDEX [foo] REBUILD PARTITION=n자세한 내용 은를 검토 하십시오.
  2. 쿼리 유지 관리를 개선하기 위해 파티션 제거 및 파티션 수준 잠금을 활용합니다. 나는 이것을 내 블로그 에서 토론한다 .

파티션을 나누는 경우 명심해야 할 것이 몇 가지 있습니다.

  • 테이블에 클러스터 된 인덱스가 있고 실제로 필요한 경우 파티션 키 클러스터 된 인덱스의 일부 여야합니다 .
  • 성능 문제를 피하려면 파티션을 정렬해야합니다. 즉, 인덱스 자체 또는 인덱스 자체의 일부로 모든 인덱스에 파티션 키가 포함되어야합니다.
  • 파티션의 인덱스 다시 작성은 현재 버전의 SQL Server (2005-2012)에서 오프라인입니다. 파티션이 크거나 파티션별로 재 구축하는 경우 차단 문제가 발생할 수 있습니다.

파티셔닝을 구현하기 전에 철저한 조사를 수행하는 것이 좋습니다. 켄드라 리틀 (Kendra Little)에는 시작할 수 있는 훌륭한 리소스 목록 이 있습니다.


클러스터형 인덱스를 분할 한 경우 모든 비 클러스터형 인덱스에 이미 분할 열이 행 로케이터로 포함되어 있지 않습니까?
Zikato

0

대답은 "예"입니다. 파티션을 정의하는 데 사용되는 논리를 기반으로 입력을 필터링하는 모든 쿼리에 대한 메커니즘이 있습니다.

그러나 적절한 필터가 있어야합니다. 그렇지 않으면 모든 파티션이 스캔됩니다. 일반적으로 파티션을 선택하기 위해 날짜 필터 (귀하의 경우)가 있어야합니다.

이를 적용하는 한 가지 방법은 뷰에 올바른 논리를 사용하여 하나의 파티션에만 액세스하는 뷰를 갖는 것입니다.


같은 물리 디스크로 분할 할 때 성능이 얼마나 향상 될지 궁금합니다.
sotn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.