2010-11-25 2 views
0

저는 거대한 테이블 (수십억 개의 행)에서 파티셔닝을 구현할 것입니다.SQL Server 2008 R2에서 mod 분할을 구현하는 방법은 무엇입니까?

각 테이블 행은 특정 장치에 대해 일종의 상태를 가지고 있으며 이는 분 단위로 삽입됩니다. 따라서 장치 당 하루에 1440 (24 x 60) 행이있게됩니다. 각 장치에는 고유 한 ID (DeviceID)가 있습니다.

DeviceID MOD {TheNumberOfPartitionsThatIWant}를 사용하여 파티셔닝하는 것에 대해 생각했습니다. TheNumberOfPartitionsThatIWant가 250 인 것이 좋은 절충안이라고 생각합니다. 이 전략을 사용하면 장치를 파티션 전체에 균등하게 배포 할 수 있으며 특정 장치를 쿼리 할 때 쿼리 엔진은 모든 250 개의 파티션이 아니라 하나의 파티션 만 터치하면됩니다.

문제는이 열을 사용하여 파티션 스키마에서 테이블을 정의 할 수 있도록 행이 속한 파티션을 나타 내기 위해 내 테이블에 여분의 열을 추가해야한다는 것입니다. 이 간단한 열을 사용하는 대신 파티션 스키마에 DeviceID MOD 250을 제공하는 것이 훨씬 더 좋습니다. 거기에 대한 해결 방법이 있습니까?

+0

이전에 [질문] (http://stackoverflow.com/questions/4249073/partitioning-for-query-performance-in-sql-server-2008)에 ** ** 2 **의 의견을 보았습니다. 드라이브. 2 개의 파티션을 사용합니다. 이러한 종류의 볼륨을 처리하려면 하드웨어에서 * 전혀 * 처리하지 마십시오. – gbn

+0

그것은 단지 경험이었습니다. 최종 솔루션에서는 DAS 또는 SAN 구성을 사용합니다. – gsb

+0

파티셔닝 전략의 목적은 무엇입니까? 쿼리에서 파티션 제거를 달성하거나, 빠른 데이터로드를 지원하거나, 이전 데이터를 선택적으로 보관할 수 있습니까? DeviceID를 기반으로 계산 된 열을 기준으로 250 개의 범위를 만들 수 있지만 모든 파티션이 매일 업데이트 될 수 있다는 점을 감안할 때 현명한 분할 전략이라고는 분명하지 않습니다. 또한, 테이블의 예상 크기는 MB/GB로 하루에 무엇입니까? – sqlvogel

답변

2

함수를 기반으로 스키마 바인딩 된 계산 열에서 파티션을 나눌 수 있습니다. 그러나 작동하는 동안 이점은 제한적일 것이므로 확장 된 테스트를보고 싶을 것입니다. 또한 where 테이블 내에서 동일한 함수를 사용하기 위해 해당 테이블에 대한 모든 액세스가 필요합니다.

중요한 점은 dportas입니다. 파티셔닝은 데이터 에이징을 간단한 작업으로 만들기 때문에 어느 시점에서 시스템의 데이터가 너무 오래되었거나 가치가 없어서 제거되어야 할 필요가 있습니다. 이 데이터를 제거하려면 장기 실행 삭제로 줄일 수 있습니다.

여러 디스크로 데이터를 분산시키는 관점에서 볼 때 파티셔닝은 기존 파일 그룹/파일 기능을 크게 향상시키지 않습니다.

0

인덱싱을 적절하게하면 파티셔닝보다 나은 결과를 얻을 수 있습니다. @Andrew가 말했듯이, 파티셔닝은 주로 빠른 데이터로드 및 언로드 (즉, 파티션 전환)를위한 것입니다.

0

계산 된 열을 만들어 문제를 해결했습니다.

관련 문제