sp_estimate_data_compression_savings (Transact-SQL)

Retorna o tamanho atual de tabelas e faz a estimativa do tamanho da tabela 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. Estruturas de tabela podem ser compactadas usando compactação de linha ou de página. Se a tabela, o índice ou a partição já estiverem compactados, é possível usar esse procedimento para estimar o tamanho da tabela, do índice ou da partição se eles forem descompactados.

ObservaçãoObservaçã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çãoObservaçã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.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

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 criado usando a configuração da compactação existente e, se aplicável, o fator de preenchimento existente e nenhuma fragmentação. Como esse conjunto de linhas é criado do zero, não há nenhuma 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 AdventureWorks se ela for compactada com a compactação ROW.

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