테이블 또는 인덱스에 압축 사용

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

이 문서에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server에서 기존 테이블이나 인덱스에 대한 데이터 압축을 사용하도록 설정하는 방법을 설명합니다. 테이블 또는 인덱스를 만들 때 데이터 압축을 사용하도록 설정하려면 압축된 인덱스 만들기 및 행 압축 예제를 사용하는 테이블 만들기를 참조하세요.

제한 사항

  • 시스템 테이블에는 압축을 사용할 수 없습니다.

  • 테이블이 힙인 경우 모드에 대한 ONLINE 다시 작성 작업은 단일 스레드입니다. 다중 스레드 힙 다시 작성 작업에 모드를 사용합니다 OFFLINE . 다시 빌드 OFFLINE 작업은 옵션을 지정하지 않는 한 수행됩니다 ONLINE . 다시 빌드를 수행하는 ONLINE 방법에 대한 자세한 내용은 인덱스 작업 온라인 수행을 참조하세요.

  • 테이블에 정렬되지 않은 인덱스가 있으면 단일 파티션의 압축 설정을 변경할 수 없습니다.

  • 여러 데이터 형식은 데이터 압축의 영향을 받지 않습니다. 자세한 내용은 행 압축이 스토리지에 미치는 영향을 참조하세요.

사용 권한

테이블 또는 인덱스에 ALTER 대한 권한이 필요합니다.

SQL Server Management Studio 사용

  1. 개체 탐색기에서 압축하려는 테이블이 포함된 데이터베이스를 확장한 다음 테이블 폴더를 확장합니다.

  2. 인덱스를 압축하려면 압축할 인덱스가 포함된 테이블을 확장한 다음 인덱스 폴더를 확장합니다.

  3. 압축할 테이블 또는 인덱스, 스토리지를 차례로 가리킨 다음 압축 관리...를 선택합니다.

  4. 데이터 압축 마법사의 데이터 압축 마법사 시작 페이지에서 다음을 선택합니다.

  5. 압축 유형 선택 페이지에서 압축하려는 테이블 또는 인덱스 내의 각 파티션에 적용할 압축 유형을 선택합니다. 완료되면 다음을 선택합니다.

    다음은 압축 유형 선택 페이지에서 선택할 수 있는 옵션입니다.

    • 모든 파티션 에 대해 동일한 압축 유형 사용 확인란

      모든 파티션에 동일한 압축 설정을 구성하려면 선택합니다. 이렇게 하면 선택 상자가 활성화되고 표에서 압축 형식 열이 비활성화됩니다. 이 옵션을 선택하면 인접 목록의 옵션은 없음, 페이지입니다.

    • 파티션 번호

      테이블 또는 인덱스 내의 각 파티션을 나열합니다. 이 열은 읽기 전용입니다.

    • 압축 유형

      각 파티션에 대한 압축 옵션을 선택합니다. 모든 파티션에 대해 동일한 압축 형식을 선택한 경우에는 사용할 수 없습니다. 목록 옵션은 없음, 페이지입니다.

    • 경계

      파티션 경계를 표시합니다. 이 열은 읽기 전용입니다.

    • 행 개수

      이 파티션의 행 수를 표시합니다. 이 열은 읽기 전용입니다.

    • 현재 공간

      이 파티션이 차지하는 현재 공간(MB)을 표시합니다. 이 열은 읽기 전용입니다.

    • 요청된 압축 공간

      계산을 선택한 후 이 열은 압축 유형 열에 지정된 설정을 사용하여 압축 후 각 파티션의 예상 크기를 표시합니다. 이 열은 읽기 전용입니다.

    • 계산

      압축 형식 열에 지정된 설정을 사용하여 압축 후 각 파티션의 크기를 예측하려면 선택합니다.

  6. 출력 옵션 선택 페이지에서 압축을 완료하는 방법을 지정합니다. 스크립트 만들기를 선택하여 마법사의 이전 페이지를 기반으로 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. 확인을 선택합니다.

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

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

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

    압축 마법사 진행률 페이지에서 사용할 수 있는 옵션은 다음과 같습니다.

    • 자세히

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

    • 작업

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

    • 상태

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

    • 메시지

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

    • Report

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

    • 보고서 보기

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

    • 파일에 보고서 저장

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

    • 클립보드에 보고서 복사

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

    • 보고서를 전자 메일로 보내기

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

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

Transact-SQL 사용

SQL Server

SQL Server에서 sp_estimate_data_compression_savings를 실행한 다음 테이블 또는 인덱스에서 압축을 사용하도록 설정합니다. 다음 섹션을 참조하세요.

테이블에서 압축 사용

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

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

  3. 다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다. 이 예제에서는 먼저 저장 프로시저 sp_estimate_data_compression_savings 를 실행하여 압축 설정을 사용하는 ROW 경우 개체의 예상 크기를 반환합니다. 그런 다음, 지정된 테이블의 ROW 모든 파티션에서 압축을 사용하도록 설정하는 예제입니다.

    USE AdventureWorks2022;
    GO
    EXEC sp_estimate_data_compression_savings 'Production', 'TransactionHistory', NULL, NULL, 'ROW';
    
    ALTER TABLE Production.TransactionHistory REBUILD PARTITION = ALL
    WITH (DATA_COMPRESSION = ROW);
    GO
    

인덱스 압축 사용

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

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

  3. 다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다. 이 예제에서는 먼저 카탈로그 뷰를 sys.indexes 쿼리하여 이름과 index_id 테이블의 각 인덱스를 Production.TransactionHistory 반환합니다. 그런 다음 저장 프로시저 sp_estimate_data_compression_savings 를 실행하여 압축 설정을 사용하는 PAGE 경우 지정된 인덱스 ID의 예상 크기를 반환합니다. 마지막으로, 이 예제에서는 압축을 지정하여 인덱스 ID 2()IX_TransactionHistory_ProductID를 다시 작성합니다 PAGE .

    USE AdventureWorks2022;
    GO
    SELECT name, index_id
    FROM sys.indexes
    WHERE OBJECT_NAME (object_id) = N'TransactionHistory';
    
    EXEC sp_estimate_data_compression_savings
        @schema_name = 'Production',
        @object_name = 'TransactionHistory',
        @index_id = 2,
        @partition_number = NULL,
        @data_compression = 'PAGE';
    
    ALTER INDEX IX_TransactionHistory_ProductID ON Production.TransactionHistory REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE);
    GO
    

Azure SQL Database에서

Azure SQL Database는 저장 프로시저를 sp_estimate_data_compression_savings 지원하지 않습니다. 다음 스크립트는 압축 양을 예측하지 않고 압축을 사용하도록 설정합니다.

테이블에서 압축 사용

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

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

  3. 다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다. 이 예제에서는 지정된 테이블의 ROW 모든 파티션에서 압축을 사용하도록 설정합니다.

    USE AdventureWorks2022;
    GO
    
    ALTER TABLE Production.TransactionHistory REBUILD PARTITION = ALL
    WITH (DATA_COMPRESSION = ROW);
    GO
    

인덱스 압축 사용

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

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

  3. 다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다. 이 예제에서는 먼저 카탈로그 뷰를 sys.indexes 쿼리하여 이름과 index_id 테이블의 각 인덱스를 Production.TransactionHistory 반환합니다. 마지막으로, 이 예제에서는 압축을 지정하여 인덱스 ID 2()IX_TransactionHistory_ProductID를 다시 작성합니다 PAGE .

    USE AdventureWorks2022;
    GO
    SELECT name, index_id
    FROM sys.indexes
    WHERE OBJECT_NAME (object_id) = N'TransactionHistory';
    
    ALTER INDEX IX_TransactionHistory_ProductID ON Production.TransactionHistory REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE);
    GO
    

자세한 내용은 ALTER TABLE(Transact-SQL)ALTER INDEX(Transact-SQL)를 참조하세요.

참고 항목