다음을 통해 공유


sp_estimate_data_compression_savings(Transact-SQL)

테이블의 현재 크기를 반환하고 요청된 압축 상태에 대한 테이블 크기를 예상합니다. 전체 테이블 또는 테이블 일부에 대해 압축을 계산할 수 있습니다. 여기에는 힙, 클러스터형 인덱스, 비클러스터형 인덱스, 인덱싱된 뷰 및 테이블/인덱스 파티션이 포함됩니다. 테이블 구조는 행 압축 또는 페이지 압축을 사용하여 압축할 수 있습니다. 테이블, 인덱스 또는 파티션이 이미 압축된 경우 이 절차에 따라 테이블, 인덱스 또는 파티션이 압축되지 않았을 경우의 크기를 예상할 수 있습니다.

[!참고]

압축 및 sp_estimate_data_compression_savings는 SQL Server 2008 Enterprise Edition 및 Developer Edition에서만 사용할 수 있습니다.

이 저장 프로시저는 요청된 압축 설정을 사용할 경우의 개체 크기를 예상하기 위해 원본 개체를 샘플링하고 이 데이터를 tempdb에 생성된 해당 테이블 및 인덱스에 로드합니다. 그런 다음 tempdb에 생성된 테이블 또는 인덱스가 요청된 설정으로 압축되고 예상된 압축 전후 크기 변경 사항이 계산됩니다.

테이블, 인덱스 또는 파티션의 압축 상태를 변경하려면 ALTER TABLE 또는 ALTER INDEX 문을 사용하십시오. 압축에 대한 자세한 내용은 압축된 테이블 및 인덱스 만들기를 참조하십시오.

[!참고]

기존 데이터가 조각화된 경우 인덱스를 다시 작성하면 압축을 사용하지 않아도 크기를 줄일 수 있습니다. 인덱스를 다시 작성하는 동안 인덱스에는 채우기 비율이 적용됩니다. 이렇게 하면 인덱스 크기가 커질 수 있습니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

sp_estimate_data_compression_savings 
      [ @schema_name = ] 'schema_name'  
     , [ @object_name = ] 'object_name' 
    , [@index_id = ] index_id 
     , [@partition_number = ] partition_number 
    , [@data_compression = ] 'data_compression' 
[;]

인수

  • [ @schema\_name = ] 'schema_name'
    테이블 또는 인덱싱된 뷰를 포함하는 데이터베이스 스키마의 이름입니다. schema_name은 sysname입니다. schema_name이 NULL이면 현재 사용자의 기본 스키마가 사용됩니다.

  • [ @object\_name = ] 'object_name'
    인덱스가 있는 테이블 또는 인덱싱된 뷰의 이름입니다. object_name은 sysname입니다.

  • [ @index\_id = ] 'index_id'
    인덱스의 ID입니다. index_id는 int이고 인덱스의 ID 번호, NULL 또는 0(object_id가 힙인 경우) 값 중 하나일 수 있습니다. 기본 테이블 또는 뷰에 대한 모든 인덱스 정보를 반환하려면 NULL을 지정합니다. NULL을 지정하는 경우 partition_number에도 NULL을 지정해야 합니다.

  • [ @partition\_number = ] 'partition_number'
    개체의 파티션 번호입니다. partition_number는 int이고 인덱스 또는 힙의 파티션 번호, NULL 또는 1(분할되지 않은 인덱스 또는 힙의 경우) 값 중 하나일 수 있습니다.

    파티션을 지정하기 위해 $partition 함수를 지정할 수도 있습니다. 소유하는 개체의 모든 파티션에 대한 정보를 반환하려면 NULL을 지정합니다.

  • [ @data\_compression = ] 'data_compression'
    계산할 압축 유형입니다. data_compression은 NONE, ROW 또는 PAGE 값 중 하나일 수 있습니다.

반환 코드 값

0(성공) 또는 1(실패)

결과 집합

테이블, 인덱스 또는 파티션의 현재 크기 및 예상 크기를 제공하는 다음 결과 집합이 반환됩니다.

열 이름

데이터 형식

설명

object_name

sysname

테이블 또는 인덱싱된 뷰의 이름입니다.

schema_name

sysname

테이블 또는 인덱싱된 뷰의 스키마입니다.

index_id

int

인덱스의 인덱스 ID입니다.

0 = 힙

1 = 클러스터형 인덱스

> 1 = 비클러스터형 인덱스

partition_number

int

파티션 번호입니다. 분할되지 않은 테이블 또는 인덱스의 경우 1을 반환합니다.

size_with_current_compression_setting (KB)

bigint

요청된 테이블, 인덱스 또는 파티션의 현재 크기입니다.

size_with_requested_compression_setting (KB)

bigint

요청된 압축 설정을 사용하는 테이블, 인덱스 또는 파티션의 예상 크기이며, 해당되는 경우 조각화가 없는 것으로 가정하고 기존 채우기 비율이 사용됩니다.

sample_size_with_current_compression_setting (KB)

bigint

기존 압축 설정을 사용하여 만든 샘플의 크기이며, 해당되는 경우 조각화가 없는 것으로 가정하고 기존 채우기 비율을 사용합니다. 이 행 집합은 새로 만들어지기 때문에 조각화가 없습니다.

sample_size_with_requested_compression_setting (KB)

bigint

요청된 압축 설정을 사용하여 만든 샘플의 크기이며, 해당되는 경우 조각화가 없는 것으로 가정하고 기존 채우기 비율을 사용합니다.

주의

sp_estimate_data_compression_savings를 사용하면 테이블 또는 파티션에 행 또는 페이지 압축을 사용하도록 설정할 경우의 압축 전후 크기 변경 사항을 예상할 수 있습니다. 예를 들어 평균 행 크기가 40% 줄어드는 경우 개체 크기를 40% 줄일 수 있습니다. 공간 크기는 채우기 비율과 행 크기에 따라 달라지므로 공간이 절약되지 않을 수도 있습니다. 예를 들어 8000바이트 길이의 행이 있고 행 크기를 40% 줄인 경우에도 여전히 데이터 페이지 하나에 행 하나만 넣을 수 있습니다. 이 경우에는 공간이 절약되지 않습니다.

sp_estimate_data_compression_savings 실행 결과에서 테이블이 확장됨을 나타내는 경우 테이블의 많은 행이 데이터 형식의 전체 자릿수를 거의 모두 사용하며 압축된 형식에 필요한 작은 오버헤드 추가분이 압축으로 얻을 수 있는 공간 절약보다 큰 것입니다. 드물지만 이러한 경우에는 압축을 사용하지 마십시오.

테이블에 압축을 사용하도록 설정한 경우 sp_estimate_data_compression_savings를 사용하면 테이블을 압축하지 않을 경우의 평균 행 크기를 예상할 수 있습니다.

이러한 작업 시 테이블에 대한 IS 잠금을 획득할 수 있습니다. IS 잠금을 획득할 수 없는 경우 프로시저가 차단됩니다. 테이블은 커밋된 읽기 격리 수준에서 검색됩니다.

요청된 압축 설정이 현재 압축 설정과 동일한 경우 저장 프로시저는 기존 채우기 비율을 사용하여 데이터 조각화가 없을 경우의 예상 크기를 반환합니다.

인덱스 또는 파티션 ID가 없으면 결과가 반환되지 않습니다.

사용 권한

테이블에 대한 SELECT 권한이 필요합니다.

다음 예에서는 ROW 압축을 사용하여 압축할 경우 AdventureWorks 데이터베이스의 Production.WorkOrderRouting 테이블 크기를 계산합니다.

USE AdventureWorks
GO
EXEC sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW' ;
GO