다음을 통해 공유


파티션을 디자인하여 데이터 하위 집합 관리

테이블이나 인덱스를 분할하면 Transact-SQL ALTER TABLE...SWITCH 문을 사용하여 다음과 같은 방법으로 데이터 하위 집합을 효율적으로 신속하게 이동할 수 있습니다.

  • 테이블을 파티션으로 기존의 분할된 테이블에 추가

  • 분할된 다른 테이블로 파티션 전환

  • 단일 테이블에서 파티션 제거

정기적으로 분할된 테이블에 새 데이터를 추가하고 해당 테이블에서 이전 데이터를 제거하려는 경우 앞에서 설명한 시나리오가 유용할 수 있습니다. 다양한 시나리오에서 이러한 작업에는 많은 양 또는 적은 양의 데이터가 사용될 수 있습니다. 추가할 새 데이터를 로드, 삭제 또는 변환해야 할 경우 이를 파티션으로 추가하기 전에 별도의 엔터티로 처리할 수 있습니다. 이전 데이터를 보관하거나 웨어하우스에 저장할 수 있습니다. INSERT INTO SELECT FROM 문과 달리 데이터가 실제적으로 이동하지 않으므로 컬렉션 크기에 관계없이 전송이 빠르고 효율적입니다. 저장 위치에 대한 메타데이터만 다른 파티션으로 변경될 뿐입니다.

시나리오 예: AdventureWorks

AdventureWorks 예제 데이터베이스의 분할 시나리오에서 Adventure Works Cycles는 두 테이블 간에 파티션을 전환하여 TransactionHistory 테이블의 이전 데이터를 TransactionHistoryArchive 테이블에 보관합니다. TransactionDate 필드에서 TransactionHistory를 분할하면 이 작업이 가능합니다. 각 파티션의 값 범위는 한 달입니다. TransactionHistory 테이블은 해당 연도의 최신 트랜잭션을 유지 관리하고 TransactionHistoryArchive는 이전 트랜잭션을 유지 관리합니다. 이러한 방법으로 테이블을 분할하면 해당 연도의 한 달 데이터를 월별로 TransactionHistory에서 TransactionHistoryArchive로 전송할 수 있습니다.

매달 초에 TransactionHistory 테이블에 현재 있는 월 데이터 중 가장 빠른 데이터가 TransactionHistoryArchive 테이블로 전환됩니다. 이 태스크를 수행하기 위해 다음이 발생합니다.

  1. TransactionHistoryArchive 테이블의 디자인 스키마가 TransactionHistory 테이블과 동일해야 합니다. 또한 새 데이터를 받을 수 있도록 빈 파티션이 있어야 합니다. 이 경우 TransactionHistoryArchive는 단 두 개의 파티션으로 이루어진 분할된 테이블입니다. 한 파티션에는 2003년 9월 이전의 모든 데이터가 저장되고 다른 파티션에는 2003년 9월 및 그 이후의 모든 데이터가 저장됩니다. 이 마지막 파티션은 비어 있습니다.

    파티션 전환 전의 테이블 구조

  2. 빈 파티션을 두 개로 분할하도록 TransactionHistoryArchive 테이블의 파티션 함수가 수정되는데 이 중 한 파티션은 2003년 9월 데이터용 새 파티션을 받도록 정의됩니다.

    파티션 전환 1단계

  3. 2003년 9월 중에 만든 모든 데이터를 포함하고 있는 TransactionHistory 테이블의 첫 번째 파티션이 TransactionHistoryArchive 테이블의 두 번째 파티션으로 전환됩니다. TransactionHistory 테이블에서 9월 1일 이전(TransactionDate >= '9/01/2003')의 데이터를 지정하지 않도록 CHECK 제약 조건을 정의해야 합니다. 이 제약 조건은 파티션 1이 2003년 9월 데이터만 포함하고 TransactionHistoryArchive 테이블의 2003년 9월 데이터만 보유한 파티션으로 전환할 준비가 되도록 합니다. 또한 전환 이전에 해당 테이블에 정렬되지 않은 인덱스가 모두 삭제 또는 해제되어야 합니다. 그러나 전환 후에 이를 다시 생성할 수 있습니다. 분할된 인덱스의 정렬 방법은 분할 인덱스에 대한 특수 지침을 참조하십시오.

    파티션 전환 2단계

  4. 처음 두 파티션을 단일 파티션으로 병합하도록 TransactionHistory 테이블의 파티션 함수가 수정됩니다. 기존의 CHECK 제약 조건이 10월 1일 이전(TransactionDate >= '10/01/2003')의 데이터를 지정하지 않도록 변경된 경우 이 파티션(이 경우 파티션 1)은 2003년 10월에 만든 모든 데이터를 포함하게 되고 다음 달에 TransactionHistoryArchive로 전환하도록 준비됩니다.

    파티션 전환 3단계

  5. 방금 추가한 9월 데이터를 포함하고 있는 두 번째 파티션을 첫 번째 파티션과 병합하도록 TransactionHistoryArchive 테이블의 파티션 함수를 다시 수정합니다. 이 작업은 첫 번째 파티션에 모든 데이터가 들어 있고 두 번째 파티션은 비어 있는 원래의 조건으로 TransactionHistoryArchive 테이블을 되돌립니다.

    파티션 전환 4단계

  6. 최근 달을 이전 달과 분리하고 파티션이 새 데이터를 받을 준비가 되도록 TransactionHistory 테이블의 파티션 함수를 다시 수정하여 마지막 파티션을 두 개로 분할합니다.

    파티션 전환 5단계

이 시나리오를 구현하기 위한 전체 Transact-SQL 스크립트는 ReadMe_SlidingWindow에 있습니다.