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

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Retorna o tamanho atual do objeto solicitado e faz a estimativa do tamanho do objeto para o estado de compactação solicitado.Returns the current size of the requested object and estimates the object size for the requested compression state. A compactação pode ser avaliada para tabelas inteiras ou partes de tabelas.Compression can be evaluated for whole tables or parts of tables. Isso inclui heaps, índices clusterizados, índices não clusterizados, índices columnstore, exibições indexadas e partições de tabela e índice.This includes heaps, clustered indexes, nonclustered indexes, columnstore indexes, indexed views, and table and index partitions. Os objetos podem ser compactados usando a compactação de linha, página, columnstore ou arquivo morto columnstore.The objects can be compressed by using row, page, columnstore or columnstore archive compression. Se a tabela, o índice ou a partição já estiver compactada, será possível usar esse procedimento para estimar o tamanho da tabela, do índice ou da partição, caso ela seja descompactada.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.

Observação

A compactação e a sp_estimate_data_compression_savings não estão disponíveis em todas as edições do MicrosoftMicrosoft @ no__t-2.Compression and sp_estimate_data_compression_savings are not available in every edition of MicrosoftMicrosoftSQL ServerSQL Server. Para obter uma lista de recursos com suporte nas edições do SQL ServerSQL Server, consulte Recursos com suporte nas edições do 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.

Para estimar o tamanho do objeto se ele usar a configuração de compactação solicitada, esse procedimento armazenado faz a amostragem do objeto de origem e carrega esses dados em uma tabela e índice equivalentes criados no 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. Em seguida, a tabela ou o índice criado no tempdb é compactado para a configuração solicitada e o aumento estimado da compactação é computado.The table or index create in tempdb is then compressed to the requested setting and the estimated compression savings is computed.

Para alterar o estado de compactação de uma tabela, índice ou partição, use as instruções ALTER TABLE ou ALTER INDEX .To change the compression state of a table, index, or partition, use the ALTER TABLE or ALTER INDEX statements. Para obter informações gerais sobre a compactação, consulte compactação de dados.For general information about compression, see Data Compression.

Observação

Se os dados existentes forem fragmentados, é possível reduzir seu tamanho sem usar compactação recriando o índice.If the existing data is fragmented, you might be able to reduce its size without using compression by rebuilding the index. Para índices, o fator de preenchimento será aplicado durante a recriação de um índice.For indexes, the fill factor will be applied during an index rebuild. Isso pode aumentar o tamanho do índice.This could increase the size of the index.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

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

ArgumentosArguments

[@schema_name =] 'schema_name'[ @schema_name= ] 'schema_name'
É o nome do esquema de banco de dados que contém a tabela ou a exibição indexada.Is the name of the database schema that contains the table or indexed view. schema_name é sysname.schema_name is sysname. Se schema_name for NULL, o esquema padrão do usuário atual será usado.If schema_name is NULL, the default schema of the current user is used.

[@object_name =] 'object_name'[ @object_name= ] 'object_name'
É o nome da tabela ou exibição indexada em que o índice está.Is the name of the table or indexed view that the index is on. object_name é sysname.object_name is sysname.

[@index_id =] index_id[ @index_id= ] index_id
É a ID do índice.Is the ID of the index. index_id é inte pode ser um dos seguintes valores: o número de ID de um índice, NULL ou 0 se object_id for um heap.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. Para retornar informações de todos os índices de uma tabela base ou exibição, especifique NULL.To return information for all indexes for a base table or view, specify NULL. Se você especificar NULL, também deverá especificar NULL para partition_number.If you specify NULL, you must also specify NULL for partition_number.

[@partition_number =] partition_number[ @partition_number= ] partition_number
É o número da partição no objeto.Is the partition number in the object. partition_number é inte pode ser um dos seguintes valores: o número da partição de um índice ou heap, nulo ou 1 para um índice não particionado ou heap.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.

Para especificar a partição, você também pode especificar a função $Partition .To specify the partition, you can also specify the $partition function. Para retornar informações de todas as partições do objeto proprietário, especifique NULL.To return information for all partitions of the owning object, specify NULL.

[@data_compression =] 'DATA_COMPRESSION'[ @data_compression= ] 'data_compression'
É o tipo de compactação a ser avaliado.Is the type of compression to be evaluated. DATA_COMPRESSION pode ser um dos seguintes valores: NENHUM, linha, página, COLUMNSTORE ou COLUMNSTORE_ARCHIVE.data_compression can be one of the following values: NONE, ROW, PAGE, COLUMNSTORE, or COLUMNSTORE_ARCHIVE.

Valores do código de retornoReturn Code Values

0 (êxito) ou 1 (falha)0 (success) or 1 (failure)

Conjuntos de resultadosResult Sets

O conjunto de resultados a seguir é retornado para fornecer o tamanho atual e estimado da tabela, índice ou partição.The following result set is returned to provide current and estimated size for the table, index, or partition.

Nome da colunaColumn name Tipo de dadosData type DescriçãoDescription
object_nameobject_name sysnamesysname Nome da tabela ou exibição indexada.Name of the table or the indexed view.
schema_nameschema_name sysnamesysname Esquema da tabela ou exibição indexada.Schema of the table or indexed view.
index_idindex_id intint ID de um índice.Index ID of an index:

0 = Heap0 = Heap

1 = Índice clusterizado1 = Clustered index

> 1 = índice não clusterizado> 1 = Nonclustered index
partition_numberpartition_number intint Número da partição.Partition number. Retorna 1 para uma tabela ou índice não particionado.Returns 1 for a nonpartitioned table or index.
size_with_current_compression_setting (KB)size_with_current_compression_setting (KB) bigintbigint Tamanho da tabela, índice ou partição solicitada como existe atualmente.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 Tamanho estimado da tabela, índice ou partição que usa a configuração da compactação solicitada e, se aplicável, o fator de preenchimento existente, supondo que não há nenhuma fragmentação.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 Tamanho do exemplo com a definição de compactação atual.Size of the sample with the current compression setting. Isso inclui qualquer fragmentação.This includes any fragmentation.
sample_size_with_requested_compression_setting (KB)sample_size_with_requested_compression_setting (KB) bigintbigint Tamanho do exemplo criado usando a configuração da compactação solicitada e, se aplicável, o fator de preenchimento existente e nenhuma fragmentação.Size of the sample that is created by using the requested compression setting; and, if applicable, the existing fill factor and no fragmentation.

ComentáriosRemarks

Use sp_estimate_data_compression_savings para estimar a economia que pode ocorrer quando você habilita uma tabela ou partição para a compactação de linha, página, columnstore ou arquivo morto 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. Por exemplo, se o tamanho médio da linha puder ser reduzido em 40%, o tamanho do objeto poderá ser potencialmente reduzido em 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. Um aumento de espaço poderá não ser obtido porque isso depende do fator de preenchimento e do tamanho da linha.You might not receive a space savings because this depends on the fill factor and the size of the row. Por exemplo, se você tiver uma linha com 8.000 bytes de comprimento e reduzir seu tamanho em 40%, ainda poderá ajustar apenas uma linha em uma página de dados.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. Não há nenhum aumento.There is no savings.

Se os resultados da execução de sp_estimate_data_compression_savings indicarem que a tabela aumentará, isso significa que muitas linhas da tabela usam quase toda a precisão dos tipos de dados e que a adição da pequena sobrecarga necessária para o formato compactado será maior do que o aumento obtido da compactação.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. Nessa caso raro, não habilite a compactação.In this rare case, do not enable compression.

Se uma tabela estiver habilitada para compactação, use sp_estimate_data_compression_savings para estimar o tamanho médio da linha se a tabela não for compactada.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.

Um bloqueio (IS) é adquirido na tabela durante essa operação.An (IS) lock is acquired on the table during this operation. Se um bloqueio (IS) não puder ser obtido, o procedimento será bloqueado.If an (IS) lock cannot be obtained, the procedure will be blocked. A tabela é verificada no nível de isolamento confirmado de leitura.The table is scanned under the read committed isolation level.

Se a configuração da compactação solicitada for igual à configuração da compactação atual, o procedimento armazenado retornará o tamanho estimado sem nenhuma fragmentação de dados e usando o fator de preenchimento existente.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.

Se a ID da partição ou índice não existir, nenhum resultado será retornado.If the index or partition ID does not exist, no results are returned.

PermissõesPermissions

Requer a permissão SELECT na tabela.Requires SELECT permission on the table.

Limitações e RestriçõesLimitations and Restrictions

Antes do SQL Server 2019, esse procedimento não se aplica a índices columnstore e, portanto, não aceitou os parâmetros de compactação de dados COLUMNSTORE e 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. A partir do SQL Server 2019, os índices columnstore podem ser usados como um objeto de origem para estimativa e como um tipo de compactação solicitado.Starting with SQL Server 2019, columnstore indexes can be used both as a source object for estimation, and as a requested compression type.

Importante

Quando os metadados de tempdb com otimização de memória estão habilitados no SQL Server 2019 (15.x)SQL Server 2019 (15.x), não há suporte para a criação de índices columnstore em tabelas temporárias.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. Devido a essa limitação, não há suporte para sp_estimate_data_compression_savings com os parâmetros de compactação de dados COLUMNSTORE e COLUMNSTORE_ARCHIVE quando os metadados de TempDB com otimização de memória estão habilitados.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.

Considerações para índices ColumnstoreConsiderations for Columnstore Indexes

Começando com SQL Server 2019 (15.x)SQL Server 2019 (15.x), sp_estimate_compression_savings dá suporte à estimativa de compactação de arquivo columnstore e 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. Ao contrário da compactação de página e linha, a aplicação da compactação columnstore a um objeto requer a criação de um novo índice columnstore.Unlike page and row compression, applying columnstore compression to an object requires creating a new columnstore index. Por esse motivo, ao usar as opções COLUMNSTORE e COLUMNSTORE_ARCHIVE deste procedimento, o tipo do objeto de origem fornecido ao procedimento determina o tipo de índice COLUMNSTORE usado para a estimativa de tamanho compactado.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. A tabela a seguir ilustra os objetos de referência usados para estimar a economia de compactação para cada tipo de objeto de origem quando o parâmetro @data_compression é definido como COLUMNSTORE ou 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.

Objeto de origemSource Object Objeto de referênciaReference Object
PilhaHeap Índice columnstore clusterizadoClustered columnstore index
Índice clusterizadoClustered index Índice columnstore clusterizadoClustered columnstore index
Índice não clusterizadoNonclustered index Índice columnstore não clusterizado (incluindo as colunas de chave e todas as colunas incluídas do índice não clusterizado fornecido, bem como a coluna de partição da tabela, se houver)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)
índice columnstore não clusterizadoNonclustered columnstore index Índice columnstore não clusterizado (incluindo as mesmas colunas que o índice columnstore não clusterizado fornecido)Nonclustered columnstore index (including the same columns as the provided nonclustered columnstore index)
Índice columnstore clusterizadoClustered columnstore index Índice columnstore clusterizadoClustered columnstore index

Observação

Ao estimar a compactação de columnstore de um objeto de origem do repositório de linhas (índice clusterizado, índice não clusterizado ou heap), se houver alguma coluna no objeto de origem que tenha um tipo de dados sem suporte em um índice columnstore, sp_estimate_compression_savings falhará com um erro.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.

Da mesma forma, quando o parâmetro @data_compression é definido como NONE, ROW ou PAGE e o objeto de origem é um índice columnstore, a tabela a seguir descreve os objetos de referência usados.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.

Objeto de origemSource Object Objeto de referênciaReference Object
Índice columnstore clusterizadoClustered columnstore index PilhaHeap
índice columnstore não clusterizadoNonclustered columnstore index Índice não clusterizado (incluindo as colunas contidas no índice columnstore não clusterizado como colunas de chave, e a coluna de partição da tabela, se houver, como uma coluna incluída)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)

Observação

Ao estimar a compactação do rowgroup (nenhum, linha ou página) de um objeto de origem columnstore, verifique se o índice de origem não contém mais de 32 colunas, pois esse é o limite com suporte em um índice de rowgroup (não clusterizado).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.

ExemplosExamples

O exemplo a seguir faz uma estimativa do tamanho da tabela Production.WorkOrderRouting quando compactada por meio da compactação 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  

Consulte tambémSee Also

CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
sys.partitions (Transact-SQL) sys.partitions (Transact-SQL)
Mecanismo de banco de dados procedimentos (armazenados Transact-SQL) Database Engine Stored Procedures (Transact-SQL)
Implementação da compactação UnicodeUnicode Compression Implementation