sp_estimate_data_compression_savings(Transact-SQL)
요청된 개체의 현재 크기를 반환하고 요청된 압축 상태에 대한 개체 크기를 예상합니다. 전체 테이블 또는 테이블 일부에 대해 압축을 계산할 수 있습니다. 여기에는 힙, 클러스터형 인덱스, 비클러스터형 인덱스, 인덱싱된 뷰 및 테이블/인덱스 파티션이 포함됩니다. 개체는 행 압축 또는 페이지 압축을 사용하여 압축할 수 있습니다. 테이블, 인덱스 또는 파티션이 이미 압축된 경우 이 절차에 따라 테이블, 인덱스 또는 파티션이 다시 압축되는 경우의 크기를 예상할 수 있습니다.
참고
압축 및 sp_estimate_data_compression_savings는 Microsoft SQL Server의 일부 버전에서만 사용할 수 있습니다.SQL Server 버전에서 지원하는 기능 목록을 보려면 SQL Server 2014 버전에서 지원하는 기능을 참조하십시오.
이 저장 프로시저는 요청된 압축 설정을 사용할 경우의 개체 크기를 예상하기 위해 원본 개체를 샘플링하고 이 데이터를 tempdb에 생성된 해당 테이블 및 인덱스에 로드합니다. 그런 다음 tempdb에 생성된 테이블 또는 인덱스가 요청된 설정으로 압축되고 예상된 압축 전후 크기 변경 사항이 계산됩니다.
테이블, 인덱스 또는 파티션의 압축 상태를 변경하려면 ALTER TABLE 또는 ALTER INDEX 문을 사용하십시오. 압축에 대한 자세한 내용은 데이터 압축를 참조하십시오.
참고
기존 데이터가 조각화된 경우 인덱스를 다시 작성하면 압축을 사용하지 않아도 크기를 줄일 수 있습니다.인덱스를 다시 작성하는 동안 인덱스에는 채우기 비율이 적용됩니다.이렇게 하면 인덱스 크기가 커질 수 있습니다.
적용 대상: SQL Server(SQL Server 2008 - 현재 버전). |
구문
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 권한이 필요합니다.
제한 사항
이 프로시저는 columnstore 테이블에 적용되지 않으므로 데이터 압축 매개 변수 COLUMNSTORE 및 COLUMNSTORE_ARCHIVE를 허용하지 않습니다.
예
다음 예에서는 ROW 압축을 사용하여 압축할 경우 Production.WorkOrderRouting 테이블 크기를 계산합니다.
USE AdventureWorks2012;
GO
EXEC sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW' ;
GO
참고 항목
참조
데이터베이스 엔진 저장 프로시저(Transact-SQL)