분할된 테이블 및 인덱스 만들기

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server, Azure SQL Database 및 Azure SQL Managed Instance에서 분할된 테이블 또는 인덱 스 만들 수 있습니다. 분할된 테이블 및 인덱스의 데이터는 데이터베이스에서 둘 이상의 파일 그룹에 분산되거나 단일 파일 그룹에 저장될 수 있는 단위로 수평으로 나뉩니다. 분할하면 큰 테이블 및 인덱스를 보다 관리하기 하며 확장할 수 있습니다.

분할된 테이블 또는 인덱스 만들기는 일반적으로 서너 부분으로 이루어집니다.

  1. 필요에 따라 파티션 구성표에 지정된 파티션을 보유할 파일 그룹 또는 파일 그룹 및 해당 데이터 파일을 만듭니다. 여러 파일 그룹에 파티션을 배치하는 주된 이유는 파일 그룹에 대한 백업 및 복원 작업을 독립적으로 수행할 수 있도록 하기 위한 것입니다. 필요하지 않은 경우 기존 파일 그룹(예: PRIMARY) 또는 관련 데이터 파일이 있는 새 파일 그룹을 사용하여 모든 파티션을 단일 파일 그룹에 할당하도록 선택할 수 있습니다. 거의 모든 시나리오에서 여러 파일 그룹을 사용하는지 여부에 관계없이 분할의 모든 이점을 얻을 수 있습니다.

  2. 테이블 또는 인덱스의 행을 지정된 열의 값에 따라 파티션에 매핑하는 파티션 함수를 만듭니다. 단일 파티션 함수를 사용하여 여러 개체를 분할할 수 있습니다.

  3. 분할된 테이블 또는 인덱스의 파티션을 하나의 파일 그룹 또는 여러 파일 그룹에 매핑하는 파티션 구성표를 만듭니다. 단일 파티션 구성표를 사용하여 여러 개체를 분할할 수 있습니다.

  4. 테이블 또는 인덱스 만들기 또는 변경하고 파티션 구성표를 분할 열로 사용할 열과 함께 스토리지 위치로 지정합니다.

참고 항목

분할은 Azure SQL Database에서 완전히 지원됩니다. Azure SQL Database에서 파일 그룹만 PRIMARY 지원되므로 모든 파티션을 파일 그룹에 배치 PRIMARY 해야 합니다.

테이블 분할은 몇 가지 구문 차이와 함께 Azure Synapse Analytics의 전용 SQL 풀에서도 사용할 수 있습니다. 전용 SQL 풀분할 테이블에 대해 자세히 알아봅니다.

사용 권한

분할된 테이블을 만들려면 데이터베이스에는 CREATE TABLE 권한이 필요하고 테이블을 만들 구성표에 대해서는 ALTER 권한이 필요합니다. 분할된 인덱스를 만들려면 인덱스가 만들어지는 테이블 또는 뷰에 대한 ALTER 권한이 필요합니다. 분할된 테이블 또는 인덱스를 만들려면 다음 추가 권한 중 하나가 필요합니다.

  • ALTER ANY DATASPACE 권한. 이 권한은 기본적으로 sysadmin 고정 서버 역할 및 db_ownerdb_ddladmin 고정 데이터베이스 역할의 멤버에게 부여됩니다.

  • 파티션 함수 및 파티션 구성표를 만들 데이터베이스에 대한 CONTROL 또는 ALTER 권한

  • 파티션 함수 및 파티션 구성표가 만들어지는 데이터베이스 서버에 대한 CONTROL SERVER 또는 ALTER ANY DATABASE 권한입니다.

Transact-SQL을 사용하여 한 파일 그룹에 분할된 테이블 만들기

파일 그룹에서 독립적으로 백업 및 복원 작업을 수행할 필요가 없는 경우 단일 파일 그룹을 사용하여 테이블을 분할하면 시간이 지남에 따라 분할된 테이블의 관리가 간소화됩니다.

이 예제는 파일 및 파일 그룹 추가를 지원하지 않는 Azure SQL Database에 적합합니다. 테이블 분할은 파일 그룹에 파티션을 만들어 Azure SQL Database에서 PRIMARY 지원됩니다. SQL Server 및 Azure SQL Managed Instance의 경우 파일 그룹 및 파일 관리 방법에 따라 사용자가 만든 파일 그룹을 지정할 수 있습니다.

이 예제에서는 Transact-SQL을 사용하여 SSMS(SQL Server Management Studio)에서 분할된 테이블을 만드는 단계를 수행하고 모든 파티션을 PRIMARY 파일 그룹에 할당합니다. 예:

  • datetime2 데이터 형식을 사용하여 세 개의 경계 값으로 명명된 myRangePF1 RANGE RIGHT 파티션 함수를 만듭니다. 세 개의 경계 값으로 인해 4개의 파티션이 있는 분할된 테이블이 생성됩니다.
  • 구문을 사용하여 파티션 함수의 ALL TO 모든 파티션을 파일 그룹에 할당하는 PRIMARY 명명 myRangePS1myRangePF1 파티션 구성표를 만듭니다.
  • 분할 열로 명명된 myRangePS1 열을 지정하여 파티션 구성표에 명명 PartitionTablecol1 테이블을 만듭니다.
  1. 개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 선택합니다.

  3. 다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다. 이 예제에서는 파티션 함수와 파티션 구성표를 만듭니다. 새 테이블은 스토리지 위치로 지정된 파티션 구성표를 사용하여 만들어집니다.

CREATE PARTITION FUNCTION myRangePF1 (datetime2(0))  
    AS RANGE RIGHT FOR VALUES ('2022-04-01', '2022-05-01', '2022-06-01') ;  
GO  

CREATE PARTITION SCHEME myRangePS1  
    AS PARTITION myRangePF1  
    ALL TO ('PRIMARY') ;  
GO  

CREATE TABLE dbo.PartitionTable (col1 datetime2(0) PRIMARY KEY, col2 char(10))  
    ON myRangePS1 (col1) ;  
GO

Transact-SQL을 사용하여 여러 파일 그룹에 분할된 테이블 만들기

이 섹션의 단계에 따라 SSMS에서 Transact-SQL을 사용하여 하나 이상의 파일 그룹, 해당 파일 및 분할된 테이블을 만듭니다.

SQL Server와 Azure SQL Managed Instance는 모두 파일 그룹 및 파일 만들기를 지원합니다. Azure SQL Managed Instance는 추가된 모든 데이터베이스 파일에 대한 경로를 자동으로 구성하므로 Azure SQL Managed Instance의 ALTER DATABASE ADD FILE 명령은 매개 변수를 FILENAME 허용하지 않습니다. Azure SQL Database는 파일 그룹에서만 분할된 테이블 만들기를 PRIMARY 지원합니다. Transact-SQL을 사용하여 하나의 파일 그룹에 분할된 테이블 만들기에서 Azure SQL Database에 대한 예제 코드를 찾습니다.

빈 데이터베이스에 대해 다음 예제를 실행합니다. 예:

  1. 개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 선택합니다.

  3. 이 예제에서는 새 데이터베이스를 만들고 사용합니다. 그런 다음 새 파일 그룹, 파티션 함수 및 파티션 구성표를 만듭니다. 새 테이블은 스토리지 위치로 지정된 파티션 구성표를 사용하여 만들어집니다. 다음 예제를 복사하여 쿼리 창에 붙여넣습니다.

    관리되는 인스턴스를 사용하는 경우 명령에서 매개 변수 및 연결된 값을 제거 FILENAME 합니다 ALTER DATABASE ADD FILE . 관리되는 인스턴스는 자동으로 파일 경로를 결정합니다.

    SQL Server 인스턴스를 사용하는 경우 매개 변수 값을 인스턴스에 FILENAME 적합한 위치로 사용자 지정합니다.

    기존 데이터베이스를 사용하려면 명령을 제거하고 CREATE DATABASE 문을 적절한 데이터베이스 이름으로 변경 USE 합니다.

    SELECT Execute.

    CREATE DATABASE PartitionTest;
    GO
    
    USE PartitionTest;
    GO
    
    ALTER DATABASE PartitionTest  
    ADD FILEGROUP test1fg;  
    GO  
    ALTER DATABASE PartitionTest  
    ADD FILEGROUP test2fg;  
    GO  
    ALTER DATABASE PartitionTest  
    ADD FILEGROUP test3fg;  
    GO  
    ALTER DATABASE PartitionTest  
    ADD FILEGROUP test4fg;   
    
    ALTER DATABASE PartitionTest   
    ADD FILE   
    (  
        NAME = partitiontest1,  
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\partitiontest1.ndf',  
        SIZE = 5MB,  
        FILEGROWTH = 5MB  
    )  
    TO FILEGROUP test1fg;  
    ALTER DATABASE PartitionTest   
    ADD FILE   
    (  
        NAME = partitiontest2,  
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\partitiontest2.ndf',  
        SIZE = 5MB,  
        FILEGROWTH = 5MB  
    )  
    TO FILEGROUP test2fg;  
    GO  
    ALTER DATABASE PartitionTest   
    ADD FILE   
    (  
        NAME = partitiontest3,  
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\partitiontest3.ndf',  
        SIZE = 5MB,  
        FILEGROWTH = 5MB  
    )  
    TO FILEGROUP test3fg;  
    GO  
    ALTER DATABASE PartitionTest   
    ADD FILE   
    (  
        NAME = partitiontest4,  
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\partitiontest4.ndf',  
        SIZE = 5MB,  
        FILEGROWTH = 5MB  
    )  
    TO FILEGROUP test4fg;  
    GO  
    
    CREATE PARTITION FUNCTION myRangePF1 (datetime2(0))  
        AS RANGE RIGHT FOR VALUES ('2022-04-01', '2022-05-01', '2022-06-01') ;  
    GO  
    
    CREATE PARTITION SCHEME myRangePS1  
        AS PARTITION myRangePF1  
        TO (test1fg, test2fg, test3fg, test4fg) ;  
    GO  
    
    CREATE TABLE PartitionTable (col1 datetime2(0) PRIMARY KEY, col2 char(10))  
        ON myRangePS1 (col1) ;  
    GO  
    

SSMS를 사용하여 테이블 분할

이 섹션의 단계에 따라 필요에 따라 파일 그룹 및 해당 파일을 만든 다음 SSMS(SQL Server Management Studio)에서 파티션 만들기 마법사를 사용하여 분할된 테이블을 만들거나 기존 테이블을 분할합니다. 파티션 만들기 마법사는 SQL Server 및 Azure SQL Managed Instance용 SSMS에서 사용할 수 있습니다. Azure SQL Database의 경우 Transact-SQL을 사용하여 하나의 파일 그룹에 분할된 테이블 만들기를 참조하세요.

새 파일 그룹 만들기(선택 사항)

분할된 테이블을 하나 이상의 새 파일 그룹에 배치하려면 이 섹션의 단계를 따르세요. SQL Server와 Azure SQL Managed Instance는 모두 파일 그룹 및 파일 만들기를 지원합니다. Azure SQL Managed Instance의 경우 생성된 모든 파일의 경로가 자동으로 구성됩니다.

  1. 개체 탐색기에서 분할된 테이블을 만들 데이터베이스를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  2. 데이터베이스 속성 -database_name 대화 상자의 페이지 선택에서 파일 그룹을 선택합니다.

  3. 행 아래에서 추가 선택합니다. 새 행에 파일 그룹 이름을 입력합니다.

    경고

    파일 그룹을 여러 개 지정하는 경우 파티션을 만들 때 경계 값에 대해 지정된 파일 그룹의 수 외에 파일 그룹이 항상 한 개 더 있어야 합니다.

  4. 분할된 테이블 또는 테이블에 대한 모든 파일 그룹을 만들 때까지 행을 계속 추가합니다.

  5. 확인을 선택합니다.

  6. 페이지 선택에서 파일을 선택합니다.

  7. 행 아래에서 추가 선택합니다. 새 행에서 파일 이름을 입력하고 파일 그룹을 선택합니다.

  8. 각 파일 그룹에 대해 하나 이상의 파일을 만들 때까지 행을 계속 추가합니다.

분할된 테이블 만들기

  1. 필요에 따라 테이블 폴더를 확장하고 정상적으로 테이블을 만듭니다. 자세한 내용은 테이블 만들기(데이터베이스 엔진)를 참조하세요. 또는 다음 단계에서 기존 테이블을 지정할 수 있습니다.

  2. 분할하려는 테이블을 마우스 오른쪽 단추로 클릭하고 스토리지를 가리킨 다음 파티션 만들기...를 선택합니다.

  3. 파티션 만들기 마법사의 파티션 만들기 마법사 시작 페이지에서 다음을 선택합니다.

  4. 분할 열 선택 페이지의 사용 가능한 분할 열 표에서 테이블을 분할할 열을 선택합니다. 데이터를 분할하는 데 사용할 수 있는 데이터 형식을 가진 열만 사용 가능한 분할 열 표에 표시됩니다. 계산 열을 분할 열로 선택하는 경우 열을 지속형 열로 만들어야 합니다.

    분할 열 및 값 범위에 대한 선택 항목은 주로 데이터를 논리적으로 그룹화할 수 있는 범위에 따라 결정됩니다. 예를 들어 데이터를 논리 그룹으로 분할하여 월 또는 분기를 1년 단위로 나눌 수 있습니다. 데이터에 대해 만들게 될 쿼리에 따라 이 논리적 그룹이 테이블 파티션을 관리하기에 충분한지 여부가 결정됩니다. text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), 별칭 데이터 형식 또는 CLR 사용자 정의 데이터 형식을 제외한 모든 데이터 형식은 분할 열로 사용할 수 있습니다.

    이 페이지에서 사용할 수 있는 추가 옵션은 다음과 같습니다.

    이 테이블을 선택한 분할된 테이블에 배치
    이 옵션을 선택하면 분할 열에서 이 테이블과 조인할 관련 데이터가 포함된 분할된 테이블을 선택할 수 있습니다. 분할 열에서 조인된 파티션이 있는 테이블의 쿼리는 일반적으로 더 효율적입니다.

    스토리지에서 고유하지 않은 인덱스 및 고유 인덱스를 인덱싱된 파티션 열로 정렬
    동일한 파티션 구성표를 사용하여 분할된 테이블의 모든 인덱스를 정렬합니다. 테이블과 해당 인덱스가 정렬되면 데이터가 같은 방식으로 분할되므로 파티션을 분할된 테이블 내/외부로 보다 효과적으로 이동할 수 있습니다.

    분할 열 및 기타 옵션을 선택한 후 다음을 선택합니다.

  5. 파티션 함수 선택 페이지의 파티션 함수 선택에서 새 파티션 함수 또는 기존 파티션 함수를 선택합니다. 새 파티션 함수를 선택하는 경우 함수의 이름을 입력합니다. 기존 파티션 함수를 선택하는 경우 목록에서 사용할 함수의 이름을 선택합니다. 데이터베이스에 다른 파티션 함수 가 없는 경우 기존 파티션 함수 옵션을 사용할 수 없습니다.

    이 페이지를 완료한 후 다음을 선택합니다.

  6. 파티션 구성표 선택 페이지의 파티션 구성표 선택에서 새 파티션 구성표 또는 기존 파티션 구성표를 선택합니다. 새 파티션 구성표를 선택하는 경우 스키마의 이름을 입력합니다. 기존 파티션 구성표를 선택하는 경우 목록에서 사용할 스키마의 이름을 선택합니다. 데이터베이스에 다른 파티션 구성표 가 없는 경우 기존 파티션 구성표 옵션을 사용할 수 없습니다.

    이 페이지를 완료한 후 다음을 선택합니다.

  7. 맵 파티션 페이지의 범위 아래에서 왼쪽 경계 또는 오른쪽 경계선택합니다. 왼쪽 경계 는 가장 높은 경계 값이 파티션 내에 포함되도록 지정합니다. 오른쪽 경계 는 가장 낮은 경계 값이 각 파티션에 포함되도록 지정합니다. Partition 함수의 오른쪽 및 왼쪽 범위에 대해 자세히 알아봅니다.

    여러 경계 지점을 지정할 때는 항상 파일 그룹에 경계 값을 할당하는 행 외에 하나의 추가 행을 입력해야 합니다.

    파일 그룹 선택 및 경계 값 표 지정의 파일 그룹에서 데이터를 분할할 파일 그룹을 선택합니다. 경계 아래에 각 파일 그룹의 경계 값을 입력합니다. 여러 파티션 또는 모든 파티션을 동일한 파일 그룹에 할당하려면 각 행에 대해 동일한 파일 그룹 이름을 선택합니다. 단일 행에서 파일 그룹을 선택하고 경계 값이 비어 있는 경우 파티션 함수는 파티션 함수 이름을 사용하여 전체 테이블 또는 인덱스가 단일 파티션에 매핑됩니다.

    이 페이지에서 사용할 수 있는 추가 옵션은 다음과 같습니다.

    경계 설정...
    경계 값 설정 대화 상자를 열어 파티션에 대해 원하는 경계 값 및 날짜 범위를 선택합니다. 이 옵션은 date, datetime, smalldatetime, datetime2 또는 datetimeoffset 데이터 형식 중 하나를 포함하는 분할 열을 선택한 경우에만 사용할 수 있습니다.

    스토리지 예측
    파티션에 지정된 각 파일 그룹의 스토리지에 대한 행 개수, 필요한 공간 및 사용 가능한 공간을 예측합니다. 이러한 값은 그리드에 읽기 전용 값으로 표시됩니다.

    경계 값 설정 대화 상자에서 다음과 같은 추가 옵션을 사용할 수 있습니다.

    시작 날짜
    파티션의 범위 값에 대한 시작 날짜를 선택합니다.

    종료 날짜
    파티션의 범위 값에 대한 종료 날짜를 선택합니다. 맵 파티션 페이지에서 왼쪽 경계선택한 경우 이 날짜는 각 파일 그룹/파티션의 마지막 값이 됩니다. 맵 파티션 페이지에서 오른쪽 경계선택한 경우 이 날짜는 다음-마지막 파일 그룹의 첫 번째 값이 됩니다.

    날짜 범위
    각 파티션에 대해 원하는 날짜 세분성 또는 범위 값 증분을 선택합니다.

    이 페이지를 완료한 후 다음을 선택합니다.

  8. 출력 옵션 선택 페이지에서 분할된 테이블을 완료하는 방법을 지정합니다. 스크립트 만들기를 선택하여 마법사의 이전 페이지를 기반으로 SQL 스크립트를 만듭니다. 마법사의 나머지 페이지를 모두 완료한 후 즉시 실행을 선택하여 분할된 새 테이블을 만듭니다. 향후 미리 결정된 시간에 새 분할된 테이블을 만들려면 일정 을 선택합니다.

    스크립트 만들기를 선택하면 스크립트 옵션에서 다음 옵션을 사용할 수 있습니다.

    파일로 스크립팅
    스크립트를 .sql 파일로 생성합니다. 파일 이름 상자에 파일 이름과 위치를 입력하거나 찾아보기를 선택하여 스크립트 파일 위치 대화 상자를 엽니다. 다른 이름으로 저장에서 유니코드 텍스트 또는 ANSI 텍스트를 선택합니다.

    클립보드로 스크립트
    스크립트를 클립보드에 저장합니다.

    새 쿼리 창에 대한 스크립트
    새 쿼리 편집기 창에 스크립트를 생성합니다. 기본적으로 이 옵션이 선택되어 있습니다.

    일정을 선택한 경우 일정 변경을 선택합니다.

    1. 새 작업 일정 대화 상자의 이름 상자에 작업 일정 이름을 입력합니다.

    2. 일정 유형 목록에서 다음과 같은 일정 유형을 선택합니다.

      • SQL Server 에이전트가 시작될 때 자동으로 시작

      • CPU가 유휴 상태가 될 때마다 시작

      • 되풀이. 분할된 새 테이블이 새 정보로 정기적으로 업데이트되는 경우 이 옵션을 선택합니다.

      • 한 번. 기본적으로 이 옵션이 선택되어 있습니다.

    3. 사용 확인란을 선택하거나 선택 취소하여 일정을 사용하거나 사용하지 않도록 설정합니다.

    4. 되풀이를 선택하는 경우:

      1. 빈도 아래발생 목록에서 발생 빈도를 지정합니다.

        • 매일을 선택하는 경우 모든 재귀 상자에 작업 일정이 일 단위로 반복되는 빈도를 입력합니다.

        • 매주를 선택하는 경우 모든 재귀 상자에 작업 일정이 몇 주 안에 반복되는 빈도를 입력합니다. 작업 일정을 실행할 요일을 선택합니다.

        • 월별을 선택한 경우 매(Day) 또는 매(The)를 선택합니다.

          • 일을 선택하는 경우 작업 일정을 실행할 월의 날짜와 월 단위로 작업 일정이 반복되는 빈도를 모두 입력합니다. 예를 들어 매월 15일에 작업 일정을 실행하려면 일을 선택하고 첫 번째 상자에 "15"를 입력하고 두 번째 상자에는 "2"를 입력합니다. 두 번째 상자에 허용되는 가장 큰 숫자는 "99"입니다.

          • 매(The)를 선택한 경우 작업 일정을 실행할 요일 및 작업 일정을 반복할 월 수를 입력합니다. 예를 들어 매월 마지막 요일에 작업 일정을 실행하려면 요일을 선택하고, 첫 번째 목록에서 마지막을 선택하고, 두 번째 목록에서 평일을 선택한 다음, 마지막 상자에 "2"를 입력합니다. 첫 번째 두 목록에서 첫 번째, 두 번째, 세 번째 또는 네 번째 및 특정 평일(예: 일요일 또는 수요일)을 선택할 수도 있습니다. 마지막 상자에 허용되는 가장 큰 숫자는 "99"입니다.

      2. 일별 빈도에서 작업 일정이 실행되는 날에 작업 일정이 반복되는 빈도를 지정합니다.

        • 한 번 수행을 선택하는 경우 한 번 수행 상자에 작업 일정을 실행할 특정 시간을 입력합니다. 오전 또는 오후뿐만 아니라 하루 중 시간, 분 및 초를 입력합니다.

        • 매번 발생을 선택하는 경우 빈도에서 선택한 날짜 동안 작업 일정이 실행되는 빈도를 지정합니다. 예를 들어 작업 일정이 실행되는 날 2시간마다 작업 일정을 반복하려면 매번 발생을 선택하고 첫 번째 상자에 "2"를 입력한 다음 목록에서 시간을 선택합니다. 이 목록에서 도 선택할 수 있습니다. 첫 번째 상자에 허용되는 가장 큰 숫자는 "100"입니다.

          시작 날짜 상자에서 작업 일정 실행을 시작할 시간을 입력합니다. 끝 상자에서 작업 일정이 반복을 중지해야 하는 시간을 입력합니다. 오전 또는 오후뿐만 아니라 하루 중 시간, 분 및 초를 입력합니다.

      3. 기간시작 날짜에서 작업 일정 실행을 시작할 날짜를 입력합니다. 종료 날짜 또는 종료 날짜 없음 을 선택하여 작업 일정 실행을 중지할 시기를 나타냅니다. 종료 날짜를 선택하는 경우 작업 일정을 실행 중지할 날짜를 입력합니다.

    5. 한 번을 선택하면 일회용 항목 아래날짜 상자에 작업 일정이 실행될 날짜를 입력합니다. 시간 상자에 작업 일정이 실행될 시간을 입력합니다. 오전 또는 오후뿐만 아니라 하루 중 시간, 분 및 초를 입력합니다.

    6. 요약설명에서 모든 작업 일정 설정이 올바른지 확인합니다.

    7. 확인을 선택합니다.

    이 페이지를 완료한 후 다음을 선택합니다.

  9. [요약 검토] 페이지의 [선택 항목 검토]에서 사용 가능한 모든 옵션을 확장하여 모든 파티션 설정이 올바른지 확인합니다. 모든 항목이 예상대로 표시되면 마침을 선택합니다.

  10. 파티션 만들기 마법사 진행률 페이지에서 파티션 만들기 마법사의 작업에 대한 상태 정보를 모니터링합니다. 마법사에서 선택한 옵션에 따라 진행률 페이지에 하나 이상의 작업이 포함될 수 있습니다. 맨 위 상자에는 마법사의 전체 상태와 마법사가 받은 상태, 오류 및 경고 메시지 수가 표시됩니다.

    파티션 만들기 마법사 진행률 페이지에서 사용할 수 있는 옵션은 다음과 같습니다.

    자세히
    마법사에서 수행한 작업에서 반환되는 작업, 상태 및 모든 메시지를 제공합니다.

    작업
    각 작업의 형식과 이름을 지정합니다.

    상태
    마법사 작업 전체가 성공 또는 실패 값을 반환했는지 여부를 나타냅니다.

    메시지
    프로세스에서 반환된 모든 오류 또는 경고 메시지를 제공합니다.

    Report
    파티션 만들기 마법사의 결과가 포함된 보고서를 만듭니다. 보고서 보기, 파일에 보고서 저장, 클립보드에 보고서 복사, 전자 메일로 보고서 보내기 옵션이 있습니다.

    보고서 보기
    파티션 작성 마법사의 진행률에 대한 텍스트 보고서가 포함된 보고서 보기 대화 상자를 엽니다.

    파일에 보고서 저장
    다른 이름으로 보고서 저장 대화 상자를 엽니다.

    클립보드에 보고서 복사
    마법사의 진행률 보고서 결과를 클립보드에 복사합니다.

    보고서를 전자 메일로 보내기
    마법사의 진행률 보고서의 결과를 전자 메일 메시지에 복사합니다.

    완료되면 닫기를 선택합니다.

파티션 만들기 마법사파티션 함수 및 구성표를 만든 다음 지정된 테이블에 분할을 적용합니다. 테이블 분할을 확인하려면 개체 탐색기에서 테이블을 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 스토리지 페이지를 선택합니다. 페이지에는 파티션 함수의 이름, 구성표 및 파티션 수와 같은 정보가 표시됩니다.

분할된 테이블 및 인덱스의 쿼리 메타데이터

메타데이터를 쿼리하여 테이블이 분할되었는지 여부, 분할된 테이블에 대한 경계 지점, 분할된 테이블의 분할 열, 각 파티션의 행 수 및 파티션에서 데이터 압축이 구현되었는지 여부를 확인할 수 있습니다.

테이블이 분할되었는지 확인

다음 쿼리는 테이블이 분할되거나 테이블 PartitionTable 의 비클러스터형 인덱스가 분할된 경우 하나 이상의 행을 반환합니다. 테이블이 분할되지 않고 테이블의 비클러스터형 인덱스가 분할되지 않으면 행이 반환되지 않습니다.

SELECT SCHEMA_NAME(t.schema_id) AS SchemaName, *   
FROM sys.tables AS t   
JOIN sys.indexes AS i   
    ON t.[object_id] = i.[object_id]   
JOIN sys.partition_schemes ps   
    ON i.data_space_id = ps.data_space_id   
WHERE t.name = 'PartitionTable';   
GO  

분할된 테이블의 경계 값 결정

다음 쿼리는 PartitionTable 테이블의 각 파티션에 대해 경계 값을 반환합니다.

쿼리는 sys.indexes의 열을 사용하여 type 테이블의 클러스터형 인덱스 또는 테이블이 힙인 경우 기본 테이블에 대한 정보만 반환합니다. 분할된 비클러스터형 인덱스를 쿼리 결과에 포함하려면 쿼리에서 제거하거나 주석 처리 AND i.type <= 1 합니다.

SELECT SCHEMA_NAME(t.schema_id) AS SchemaName, t.name AS TableName, i.name AS IndexName, 
    p.partition_number, p.partition_id, i.data_space_id, f.function_id, f.type_desc, 
    r.boundary_id, r.value AS BoundaryValue   
FROM sys.tables AS t  
JOIN sys.indexes AS i  
    ON t.object_id = i.object_id  
JOIN sys.partitions AS p  
    ON i.object_id = p.object_id AND i.index_id = p.index_id   
JOIN  sys.partition_schemes AS s   
    ON i.data_space_id = s.data_space_id  
JOIN sys.partition_functions AS f   
    ON s.function_id = f.function_id  
LEFT JOIN sys.partition_range_values AS r   
    ON f.function_id = r.function_id and r.boundary_id = p.partition_number  
WHERE 
    t.name = 'PartitionTable' 
    AND i.type <= 1  
ORDER BY SchemaName, t.name, i.name, p.partition_number;  

분할된 테이블의 파티션 열 확인

다음 쿼리는 테이블에 PartitionTable대한 분할 열의 이름을 반환합니다.

쿼리는 sys.indexes의 열을 사용하여 type 테이블의 클러스터형 인덱스 또는 테이블이 힙인 경우 기본 테이블에 대한 정보만 반환합니다. 분할된 비클러스터형 인덱스를 쿼리 결과에 포함하려면 쿼리에서 제거하거나 주석 처리 AND i.type <= 1 합니다.


SELECT   
    t.[object_id] AS ObjectID
    , SCHEMA_NAME(t.schema_id) AS SchemaName
    , t.name AS TableName   
    , ic.column_id AS PartitioningColumnID   
    , c.name AS PartitioningColumnName
    , i.name as IndexName
FROM sys.tables AS t   
JOIN sys.indexes AS i   
    ON t.[object_id] = i.[object_id]   
    AND i.[type] <= 1 -- clustered index or a heap   
JOIN sys.partition_schemes AS ps   
    ON ps.data_space_id = i.data_space_id   
JOIN sys.index_columns AS ic   
    ON ic.[object_id] = i.[object_id]   
    AND ic.index_id = i.index_id   
    AND ic.partition_ordinal >= 1 -- because 0 = non-partitioning column   
JOIN sys.columns AS c   
    ON t.[object_id] = c.[object_id]   
    AND ic.column_id = c.column_id   
WHERE t.name = 'PartitionTable';   
GO  

각 파티션에서 가능한 값 범위를 설명하는 행 결정

다음 쿼리는 테이블 PartitionTable의 파티션별 행과 사용 중인 파티션 함수의 '비교 연산자'에 대한 설명을 반환합니다. 칼렌 델라니가 제공한 쿼리 원본입니다.

쿼리는 sys.indexes의 열을 사용하여 type 테이블의 클러스터형 인덱스 또는 테이블이 힙인 경우 기본 테이블에 대한 정보만 반환합니다. 분할된 비클러스터형 인덱스를 쿼리 결과에 포함하려면 쿼리에서 제거하거나 주석 처리 AND i.type <= 1 합니다.

SELECT SCHEMA_NAME(t.schema_id) AS SchemaName, t.name AS TableName, i.name AS IndexName, 
    p.partition_number AS PartitionNumber, f.name AS PartitionFunctionName, p.rows AS Rows, rv.value AS BoundaryValue, 
CASE WHEN ISNULL(rv.value, rv2.value) IS NULL THEN 'N/A' 
ELSE
    CASE WHEN f.boundary_value_on_right = 0 AND rv2.value IS NULL THEN '>=' 
        WHEN f.boundary_value_on_right = 0 THEN '>' 
        ELSE '>=' 
    END + ' ' + ISNULL(CONVERT(varchar(64), rv2.value), 'Min Value') + ' ' + 
        CASE f.boundary_value_on_right WHEN 1 THEN 'and <' 
                ELSE 'and <=' END 
        + ' ' + ISNULL(CONVERT(varchar(64), rv.value), 'Max Value') 
END AS TextComparison
FROM sys.tables AS t  
JOIN sys.indexes AS i  
    ON t.object_id = i.object_id  
JOIN sys.partitions AS p  
    ON i.object_id = p.object_id AND i.index_id = p.index_id   
JOIN  sys.partition_schemes AS s   
    ON i.data_space_id = s.data_space_id  
JOIN sys.partition_functions AS f   
    ON s.function_id = f.function_id  
LEFT JOIN sys.partition_range_values AS r   
    ON f.function_id = r.function_id and r.boundary_id = p.partition_number  
LEFT JOIN sys.partition_range_values AS rv
    ON f.function_id = rv.function_id
    AND p.partition_number = rv.boundary_id     
LEFT JOIN sys.partition_range_values AS rv2
    ON f.function_id = rv2.function_id
    AND p.partition_number - 1= rv2.boundary_id
WHERE 
    t.name = 'PartitionTable'
    AND i.type <= 1 
ORDER BY t.name, p.partition_number;

이 열은 TextComparison 파티션 함수의 정의에 따라 각 파티션에서 가능한 값 범위를 설명합니다. 다음은 쿼리의 예제 결과 보기입니다.

SchemaName TableName IndexName PartitionNumber PartitionFunctionName rows BoundaryValue TextComparison
dbo PartitionTable PK_PartitionTable 6 PFTest 0 2022-03-01 00:00:00.000 >= 최소값 및 < 2022년 3월 1일 오전 12:00
dbo PartitionTable PK_PartitionTable 2 PFTest 2 2022-04-01 00:00:00.000 >= 2022년 3월 1일 오전 12:00 및 < 2022년 4월 1일 오전 12:00
dbo PartitionTable PK_PartitionTable 3 PFTest 6 2022-05-01 00:00:00.000 >= 2022년 4월 1일 오전 12:00 및 < 2022년 5월 1일 오전 12:00
dbo PartitionTable PK_PartitionTable 4 PFTest 0 2022-06-01 00:00:00.000 >= 2022년 5월 1일 오전 12:00 및 < 2022년 6월 1일 오전 12:00
dbo PartitionTable PK_PartitionTable 5 PFTest 6 2022-07-01 00:00:00.000 >= 2022년 6월 1일 오전 12:00 및 < 2022년 7월 1일 오전 12:00
dbo PartitionTable PK_PartitionTable 6 PFTest 0 NULL >= 2022년 7월 1일 오전 12:00 및 < 최대값

제한 사항

제한 사항 및 제한 사항의 분할 에 대한 성능 고려 사항에 대해 알아봅니다.

다음 단계

다음 문서에서 관련 개념에 대해 자세히 알아보세요.