sp_estimate_data_compression_savings (Transact-SQL)
Retorna o tamanho atual do objeto solicitado e faz a estimativa do tamanho do objeto para o estado de compactação solicitado. A compactação pode ser avaliada para tabelas inteiras ou partes de tabelas. Isso inclui heaps, índices clusterizados, índices não clusterizados, exibições indexadas e partições de tabelas e índices. Os objetos podem ser compactados usando a compactação de linha ou de página. 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.
Observação |
---|
Compactação e sp_estimate_data_compression_savings estão disponíveis apenas nas edições Enterprise e Developer do SQL Server 2008. |
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. Em seguida, a tabela ou o índice criado no tempdb é compactado para a configuração solicitada e o aumento estimado da compactação é computado.
Para alterar o estado de compactação de uma tabela, índice ou partição, use as instruções ALTER TABLE ou ALTER INDEX. Para obter informações gerais sobre compactação, consulte Criando tabelas e índices compactados.
Observação |
---|
Se os dados existentes forem fragmentados, é possível reduzir seu tamanho sem usar compactação recriando o índice. Para índices, o fator de preenchimento será aplicado durante a recriação de um índice. Isso pode aumentar o tamanho do índice. |
Sintaxe
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'
[;]
Argumentos
[ @schema_name = ] 'schema_name'
É o nome do esquema de banco de dados que contém a tabela ou exibição indexada. schema_name é sysname. Se schema_name for NULL, o esquema padrão do usuário atual será usado.[ @object_name = ] 'object_name'
É o nome da tabela ou exibição indexada em que o índice está. object_name é sysname.[ @index_id = ] 'index_id'
É a ID do índice. O index_id é int e pode ter um dos seguintes valores: o número da ID de um índice, NULL ou 0 se object_id for um heap. Para retornar informações de todos os índices de uma tabela base ou exibição, especifique NULL. Se você especificar NULL, também deverá especificar NULL para partition_number.[ @partition_number = ] 'partition_number'
É o número da partição no objeto. partition_number é int e pode ter um dos seguintes valores: o número da partição de um índice ou heap, NULL ou 1 para um heap ou índice não particionado.Para especificar a partição, também é possível especificar a função $partition. Para retornar informações de todas as partições do objeto proprietário, especifique NULL.
[ @data_compression = ] 'data_compression'
É o tipo de compactação a ser avaliado. data_compression pode ser um dos seguintes valores: NONE, ROW ou PAGE.
Valores de código de retorno
0 (êxito) ou 1 (falha)
Conjuntos de resultados
O conjunto de resultados a seguir é retornado para fornecer o tamanho atual e estimado da tabela, índice ou partição.
Nome da coluna |
Tipo de dados |
Descrição |
---|---|---|
object_name |
sysname |
Nome da tabela ou exibição indexada. |
schema_name |
sysname |
Esquema da tabela ou exibição indexada. |
index_id |
int |
ID de um índice. 0 = Heap 1 = Índice clusterizado >1 = Índice não clusterizado |
partition_number |
int |
Número da partição. Retorna 1 para uma tabela ou índice não particionado. |
size_with_current_compression_setting (KB) |
bigint |
Tamanho da tabela, índice ou partição solicitada como existe atualmente. |
size_with_requested_compression_setting (KB) |
bigint |
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. |
sample_size_with_current_compression_setting (KB) |
bigint |
Tamanho do exemplo com a definição de compactação atual. Isso inclui qualquer fragmentação. |
sample_size_with_requested_compression_setting (KB) |
bigint |
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. |
Comentários
Use sp_estimate_data_compression_savings para estimar o aumento que pode ocorrer quando uma tabela ou partição é habilitada para compactação de linha ou de página. Por exemplo, se o tamanho médio da linha puder ser reduzido em 40%, o tamanho do objeto poderá ser potencialmente reduzido em 40%. Um aumento de espaço poderá não ser obtido porque isso depende do fator de preenchimento e do tamanho da linha. Por exemplo, se você tiver uma linha de 8000 bytes de comprimento e reduzir seu tamanho em 40%, ainda poderá ajustar apenas uma linha em uma página de dados. Não há nenhum aumento.
Se os resultados da execução de sp_estimate_data_compression_savings indicarem que a tabela crescerá, isso significará 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. Nessa caso raro, não habilite a compactação.
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 estiver compactada.
Um bloqueio (IS) é adquirido na tabela durante essa operação. Se um bloqueio (IS) não puder ser obtido, o procedimento será bloqueado. A tabela é verificada no nível de isolamento confirmado de leitura.
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.
Se a ID da partição ou índice não existir, nenhum resultado será retornado.
Permissões
Requer a permissão SELECT na tabela.
Exemplos
O exemplo a seguir estimará o tamanho da tabela Production.WorkOrderRouting no banco de dados AdventureWorks2008R2 se ela for compactada com a compactação ROW.
USE AdventureWorks2008R2;
GO
EXEC sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW' ;
GO