sp_estimate_data_compression_savings(Transact-SQL)sp_estimate_data_compression_savings (Transact-SQL)

적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) 적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions)

요청된 개체의 현재 크기를 반환하고 요청된 압축 상태에 대한 개체 크기를 예상합니다.Returns the current size of the requested object and estimates the object size for the requested compression state. 전체 테이블 또는 테이블 일부에 대해 압축을 계산할 수 있습니다.Compression can be evaluated for whole tables or parts of tables. 여기에는 힙, 클러스터형 인덱스, 비클러스터형 인덱스, columnstore 인덱스, 인덱싱된 뷰, 테이블 및 인덱스 파티션이 포함 됩니다.This includes heaps, clustered indexes, nonclustered indexes, columnstore indexes, indexed views, and table and index partitions. 행, 페이지, columnstore 또는 columnstore 보관 압축을 사용 하 여 개체를 압축할 수 있습니다.The objects can be compressed by using row, page, columnstore or columnstore archive compression. 테이블, 인덱스 또는 파티션이 이미 압축된 경우 이 절차에 따라 테이블, 인덱스 또는 파티션이 다시 압축되는 경우의 크기를 예상할 수 있습니다.If the table, index, or partition is already compressed, you can use this procedure to estimate the size of the table, index, or partition if it is recompressed.

참고

압축 및 sp_estimate_data_compression_savings 일부 버전에서는 사용할 수 없습니다 MicrosoftMicrosoft SQL ServerSQL Server .Compression and sp_estimate_data_compression_savings are not available in every edition of MicrosoftMicrosoftSQL ServerSQL Server. SQL ServerSQL Server버전에서 지원되는 기능 목록은 SQL Server 2016 버전에서 지원하는 기능을 참조하세요.For a list of features that are supported by the editions of SQL ServerSQL Server, see Features Supported by the Editions of SQL Server 2016.

이 저장 프로시저는 요청된 압축 설정을 사용할 경우의 개체 크기를 예상하기 위해 원본 개체를 샘플링하고 이 데이터를 tempdb에 생성된 해당 테이블 및 인덱스에 로드합니다.To estimate the size of the object if it were to use the requested compression setting, this stored procedure samples the source object and loads this data into an equivalent table and index created in tempdb. 그런 다음 tempdb에 생성된 테이블 또는 인덱스가 요청된 설정으로 압축되고 예상된 압축 전후 크기 변경 사항이 계산됩니다.The table or index create in tempdb is then compressed to the requested setting and the estimated compression savings is computed.

테이블, 인덱스 또는 파티션의 압축 상태를 변경 하려면 ALTER table 또는 alter index 문을 사용 합니다.To change the compression state of a table, index, or partition, use the ALTER TABLE or ALTER INDEX statements. 압축에 대 한 일반 정보는 데이터 압축을 참조 하세요.For general information about compression, see Data Compression.

참고

기존 데이터가 조각화된 경우 인덱스를 다시 작성하면 압축을 사용하지 않아도 크기를 줄일 수 있습니다.If the existing data is fragmented, you might be able to reduce its size without using compression by rebuilding the index. 인덱스를 다시 작성하는 동안 인덱스에는 채우기 비율이 적용됩니다.For indexes, the fill factor will be applied during an index rebuild. 이렇게 하면 인덱스 크기가 커질 수 있습니다.This could increase the size of the index.

항목 링크 아이콘 Transact-SQL 구문 표기 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax

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'   
[;]  

인수Arguments

[ @schema_name =] 'schema_name'[ @schema_name= ] 'schema_name'
테이블 또는 인덱싱된 뷰를 포함하는 데이터베이스 스키마의 이름입니다.Is the name of the database schema that contains the table or indexed view. schema_namesysname입니다.schema_name is sysname. SCHEMA_NAME NULL 이면 현재 사용자의 기본 스키마가 사용 됩니다.If schema_name is NULL, the default schema of the current user is used.

[ @object_name =] 'object_name'[ @object_name= ] 'object_name'
인덱스가 있는 테이블 또는 인덱싱된 뷰의 이름입니다.Is the name of the table or indexed view that the index is on. object_namesysname입니다.object_name is sysname.

[ @index_id =] index_id[ @index_id= ] index_id
인덱스의 ID입니다.Is the ID of the index. index_idint이며 인덱스의 id 번호, NULL 또는 object_id 경우 값 중 하나일 수 있습니다.index_id is int, and can be one of the following values: the ID number of an index, NULL, or 0 if object_id is a heap. 기본 테이블 또는 뷰에 대한 모든 인덱스 정보를 반환하려면 NULL을 지정합니다.To return information for all indexes for a base table or view, specify NULL. NULL을 지정 하는 경우 partition_number에 대해서도 null을 지정 해야 합니다.If you specify NULL, you must also specify NULL for partition_number.

[ @partition_number =] partition_number[ @partition_number= ] partition_number
개체의 파티션 번호입니다.Is the partition number in the object. partition_numberint이며 인덱스 또는 힙의 파티션 번호, NULL 또는 1 (분할 되지 않은 인덱스 또는 힙의 경우) 중 하나일 수 있습니다.partition_number is int, and can be one of the following values: the partition number of an index or heap, NULL or 1 for a nonpartitioned index or heap.

파티션을 지정 하려면 $partition 함수를 지정할 수도 있습니다.To specify the partition, you can also specify the $partition function. 소유하는 개체의 모든 파티션에 대한 정보를 반환하려면 NULL을 지정합니다.To return information for all partitions of the owning object, specify NULL.

[ @data_compression =] 'data_compression'[ @data_compression= ] 'data_compression'
계산할 압축 유형입니다.Is the type of compression to be evaluated. data_compression 는 NONE, ROW, PAGE, COLUMNSTORE 또는 COLUMNSTORE_ARCHIVE 값 중 하나일 수 있습니다.data_compression can be one of the following values: NONE, ROW, PAGE, COLUMNSTORE, or COLUMNSTORE_ARCHIVE.

반환 코드 값Return Code Values

0(성공) 또는 1(실패)0 (success) or 1 (failure)

결과 집합Result Sets

테이블, 인덱스 또는 파티션의 현재 크기 및 예상 크기를 제공하는 다음 결과 집합이 반환됩니다.The following result set is returned to provide current and estimated size for the table, index, or partition.

열 이름Column name 데이터 형식Data type DescriptionDescription
object_nameobject_name sysnamesysname 테이블 또는 인덱싱된 뷰의 이름입니다.Name of the table or the indexed view.
schema_nameschema_name sysnamesysname 테이블 또는 인덱싱된 뷰의 스키마입니다.Schema of the table or indexed view.
index_idindex_id intint 인덱스의 인덱스 ID입니다.Index ID of an index:

0 = 힙0 = Heap

1 = 클러스터형 인덱스1 = Clustered index

> 1 = 비클러스터형 인덱스> 1 = Nonclustered index
partition_numberpartition_number intint 파티션 번호입니다.Partition number. 분할되지 않은 테이블 또는 인덱스의 경우 1을 반환합니다.Returns 1 for a nonpartitioned table or index.
size_with_current_compression_setting (KB)size_with_current_compression_setting (KB) bigintbigint 요청된 테이블, 인덱스 또는 파티션의 현재 크기입니다.Size of the requested table, index, or partition as it currently exists.
size_with_requested_compression_setting (KB)size_with_requested_compression_setting (KB) bigintbigint 요청된 압축 설정을 사용하는 테이블, 인덱스 또는 파티션의 예상 크기이며, 해당되는 경우 조각화가 없는 것으로 가정하고 기존 채우기 비율이 사용됩니다.Estimated size of the table, index, or partition that uses the requested compression setting; and, if applicable, the existing fill factor, and assuming there is no fragmentation.
sample_size_with_current_compression_setting (KB)sample_size_with_current_compression_setting (KB) bigintbigint 현재 압축 설정을 사용하는 샘플의 크기입니다.Size of the sample with the current compression setting. 여기에는 조각화가 포함됩니다.This includes any fragmentation.
sample_size_with_requested_compression_setting (KB)sample_size_with_requested_compression_setting (KB) bigintbigint 요청된 압축 설정을 사용하여 만든 샘플의 크기이며, 해당되는 경우 조각화가 없는 것으로 가정하고 기존 채우기 비율을 사용합니다.Size of the sample that is created by using the requested compression setting; and, if applicable, the existing fill factor and no fragmentation.

설명Remarks

를 사용 sp_estimate_data_compression_savings 하 여 행, 페이지, columnstore 또는 columnstore 보관 압축에 테이블이 나 파티션을 사용 하도록 설정할 때 발생할 수 있는 절감 액을 예측할 수 있습니다.Use sp_estimate_data_compression_savings to estimate the savings that can occur when you enable a table or partition for row, page, columnstore or columnstore archive compression. 예를 들어 평균 행 크기가 40% 줄어드는 경우 개체 크기를 40% 줄일 수 있습니다.For instance if the average size of the row can be reduced by 40 percent, you can potentially reduce the size of the object by 40 percent. 공간 크기는 채우기 비율과 행 크기에 따라 달라지므로 공간이 절약되지 않을 수도 있습니다.You might not receive a space savings because this depends on the fill factor and the size of the row. 예를 들어 8000 바이트 길이의 행이 있고 해당 크기를 40%로 줄이면 데이터 페이지에 행을 하나만 포함할 수 있습니다.For example, if you have a row that is 8,000 bytes long and you reduce its size by 40 percent, you can still fit only one row on a data page. 이 경우에는 공간이 절약되지 않습니다.There is no savings.

sp_estimate_data_compression_savings 실행 결과에서 테이블이 확장됨을 나타내는 경우 테이블의 많은 행이 데이터 형식의 전체 자릿수를 거의 모두 사용하며 압축된 형식에 필요한 작은 오버헤드 추가분이 압축으로 얻을 수 있는 공간 절약보다 큰 것입니다.If the results of running sp_estimate_data_compression_savings indicate that the table will grow, this means that many rows in the table use almost the whole precision of the data types, and the addition of the small overhead needed for the compressed format is more than the savings from compression. 드물지만 이러한 경우에는 압축을 사용하지 마십시오.In this rare case, do not enable compression.

테이블에 압축을 사용하도록 설정한 경우 sp_estimate_data_compression_savings를 사용하면 테이블을 압축하지 않을 경우의 평균 행 크기를 예상할 수 있습니다.If a table is enabled for compression, use sp_estimate_data_compression_savings to estimate the average size of the row if the table is uncompressed.

이러한 작업 시 테이블에 대한 IS 잠금을 획득할 수 있습니다.An (IS) lock is acquired on the table during this operation. IS 잠금을 획득할 수 없는 경우 프로시저가 차단됩니다.If an (IS) lock cannot be obtained, the procedure will be blocked. 테이블은 커밋된 읽기 격리 수준에서 검색됩니다.The table is scanned under the read committed isolation level.

요청된 압축 설정이 현재 압축 설정과 동일한 경우 저장 프로시저는 기존 채우기 비율을 사용하여 데이터 조각화가 없을 경우의 예상 크기를 반환합니다.If the requested compression setting is same as the current compression setting, the stored procedure will return the estimated size with no data fragmentation and using the existing fill factor.

인덱스 또는 파티션 ID가 없으면 결과가 반환되지 않습니다.If the index or partition ID does not exist, no results are returned.

사용 권한Permissions

테이블에 대한 SELECT 권한이 필요합니다.Requires SELECT permission on the table.

제한 사항Limitations and Restrictions

SQL Server 2019 이전에는이 절차가 columnstore 인덱스에 적용 되지 않았기 때문에 데이터 압축 매개 변수 COLUMNSTORE 및 COLUMNSTORE_ARCHIVE를 수락 하지 않았습니다.Prior to SQL Server 2019, this procedure did not apply to columnstore indexes, and therefore did not accept the data compression parameters COLUMNSTORE and COLUMNSTORE_ARCHIVE. SQL Server 2019부터 columnstore 인덱스를 추정의 원본 개체와 요청 된 압축 형식으로 모두 사용할 수 있습니다.Starting with SQL Server 2019, columnstore indexes can be used both as a source object for estimation, and as a requested compression type.

중요

에서 메모리 최적화 TempDB 메타 데이터 를 사용 하도록 설정 하면 SQL Server 2019 (15.x)SQL Server 2019 (15.x) 임시 테이블에 columnstore 인덱스를 만들 수 없습니다.When Memory-Optimized TempDB Metadata is enabled in SQL Server 2019 (15.x)SQL Server 2019 (15.x), creation of columnstore indexes on temporary tables is not supported. 이러한 제한으로 인해 sp_estimate_data_compression_savings은 COLUMNSTORE 및 COLUMNSTORE_ARCHIVE 데이터 압축 매개 변수를 지원 하지 않으므로 메모리 최적화 TempDB 메타 데이터를 사용할 수 있습니다.Because of this limitation, sp_estimate_data_compression_savings is not supported with the COLUMNSTORE and COLUMNSTORE_ARCHIVE data compression parameters when Memory-Optimized TempDB Metadata is enabled.

Columnstore 인덱스에 대한 고려 사항Considerations for Columnstore Indexes

부터 SQL Server 2019 (15.x)SQL Server 2019 (15.x)sp_estimate_compression_savings columnstore 및 columnstore 보관 압축을 모두 계산 합니다.Starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x), sp_estimate_compression_savings supports estimating both columnstore and columnstore archive compression. 페이지 및 행 압축과 달리 columnstore 압축을 개체에 적용 하려면 새 columnstore 인덱스를 만들어야 합니다.Unlike page and row compression, applying columnstore compression to an object requires creating a new columnstore index. 이러한 이유로이 프로시저의 COLUMNSTORE 및 COLUMNSTORE_ARCHIVE 옵션을 사용할 경우 프로시저에 제공 되는 원본 개체의 형식에 따라 압축 된 예상 크기에 사용 되는 columnstore 인덱스 유형이 결정 됩니다.For this reason, when using the COLUMNSTORE and COLUMNSTORE_ARCHIVE options of this procedure, the type of the source object provided to the procedure determines the type of columnstore index used for the compressed size estimate. 다음 표에서는 @data_compression 매개 변수가 COLUMNSTORE 또는 COLUMNSTORE_ARCHIVE로 설정 된 경우 각 원본 개체 유형에 대 한 압축 절감 액을 계산 하는 데 사용 되는 참조 개체를 보여 줍니다.The following table illustrates the reference objects used to estimate compression savings for each source object type when the @data_compression parameter is set to either COLUMNSTORE or COLUMNSTORE_ARCHIVE.

원본 개체Source Object 참조 개체Reference Object
Heap 클러스터형 columnstore 인덱스Clustered columnstore index
클러스터형 인덱스Clustered index 클러스터형 columnstore 인덱스Clustered columnstore index
비클러스터형 인덱스Nonclustered index 비클러스터형 columnstore 인덱스 (키 열 및 제공 된 비클러스터형 인덱스의 포괄 열 뿐만 아니라 테이블의 파티션 열 포함)Nonclustered columnstore index (including the key columns and any included columns of the provided nonclustered index, as well as the partition column of the table, if any)
비클러스터형 columnstore 인덱스Nonclustered columnstore index 비클러스터형 columnstore 인덱스 (제공 된 비클러스터형 columnstore 인덱스와 동일한 열 포함)Nonclustered columnstore index (including the same columns as the provided nonclustered columnstore index)
클러스터형 columnstore 인덱스Clustered columnstore index 클러스터형 columnstore 인덱스Clustered columnstore index

참고

Rowstore 원본 개체 (클러스터형 인덱스, 비클러스터형 인덱스 또는 힙)에서 columnstore 압축을 추정 하는 경우 원본 개체에 columnstore 인덱스에서 지원 되지 않는 데이터 형식의 열이 있는 경우에는 오류가 발생 하 여 sp_estimate_compression_savings 실패 합니다.When estimating columnstore compression from a rowstore source object (clustered index, nonclustered index or heap), if there are any columns in the source object that have a data type that is not supported in a columnstore index, sp_estimate_compression_savings will fail with an error.

마찬가지로 @data_compression 매개 변수를, 또는로 설정 NONEROW PAGE 고 원본 개체가 columnstore 인덱스인 경우 다음 표에서는 사용 되는 참조 개체를 간략하게 설명 합니다.Similarly, when the @data_compression parameter is set to NONE, ROW, or PAGE and the source object is a columnstore index, the following table outlines the reference objects used.

원본 개체Source Object 참조 개체Reference Object
클러스터형 columnstore 인덱스Clustered columnstore index Heap
비클러스터형 columnstore 인덱스Nonclustered columnstore index 비클러스터형 인덱스 (비클러스터형 columnstore 인덱스에 포함 된 열을 키 열로 포함) 및 테이블의 파티션 열 (있는 경우)을 포괄 열로 포함Nonclustered index (including the columns contained in the nonclustered columnstore index as key columns, and the partition column of the table, if any, as an included column)

참고

Columnstore 원본 개체에서 rowstore 압축 (NONE, ROW 또는 PAGE)을 추정 하는 경우 rowstore (비클러스터형) 인덱스에서 지원 되는 제한은 원본 인덱스에 32 개 보다 많은 열이 포함 되지 않아야 합니다.When estimating rowstore compression (NONE, ROW or PAGE) from a columnstore source object, be sure that the source index does not contain more than 32 columns as this is the limit supported in a rowstore (nonclustered) index.

Examples

다음 예에서는 Production.WorkOrderRouting 압축을 사용하여 압축할 경우 ROW 테이블 크기를 계산합니다.The following example estimates the size of the Production.WorkOrderRouting table if it is compressed by using ROW compression.

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

참고 항목See Also

CREATE TABLE(Transact-SQL) CREATE TABLE (Transact-SQL)
CREATE INDEX(Transact-SQL) CREATE INDEX (Transact-SQL)
(Transact-sql) sys.partitions (Transact-SQL)
Transact-sql)(저장 프로시저 데이터베이스 엔진 Database Engine Stored Procedures (Transact-SQL)
유니코드 압축 구현Unicode Compression Implementation