Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Devolve o tamanho atual do objeto solicitado e estima o tamanho do objeto para o estado de compressão solicitado. A compressão pode ser avaliada para tabelas inteiras ou partes de tabelas. Isto inclui heaps, índices agrupados, índices não agrupados, índices de column store, vistas indexadas e partições de tabela e índice. Os objetos podem ser comprimidos usando compressão de arquivos de linhas, páginas, colunas ou colunstores. Se a tabela, índice ou partição já estiverem comprimidos, pode usar este procedimento para estimar o tamanho da tabela, índice ou partição se for recomprimido ou armazenado sem compressão.
O sys.sp_estimate_data_compression_savings procedimento armazenado do sistema está disponível no Azure SQL Database e no Azure SQL Managed Instance.
A partir do SQL Server 2022 (16.x), pode comprimir dados XML fora da linha em colunas usando o tipo de dado xml , reduzindo os requisitos de armazenamento e memória. Para obter mais informações, consulte CREATE TABLE e CREATE INDEX.
sp_estimate_data_compression_savings suporta estimativas de compressão XML.
Observação
Compressão e sp_estimate_data_compression_savings não estão disponíveis em todas as edições do SQL Server. Para obter uma lista de funcionalidades suportadas pelas edições do SQL Server, consulte Edições e funcionalidades suportadas do SQL Server 2022.
Para estimar o tamanho do objeto caso este use a configuração de compressão solicitada, este procedimento armazenado amostra o objeto fonte e carrega esses dados numa tabela e índice equivalentes criados em tempdb. A tabela ou índice criado em tempdb é então comprimido para a configuração solicitada e a poupança estimada de compressão é calculada.
Para alterar o estado de compressão de uma tabela, índice ou partição, use as instruções ALTER TABLE ou ALTER INDEX . Para informações gerais sobre compressão, veja Compressão de dados.
Observação
Se os dados existentes estiverem fragmentados, poderá conseguir reduzir o seu tamanho sem usar compressão reconstruindo o índice. Para índices, o fator de preenchimento será aplicado durante uma reconstrução do índice. Isto pode aumentar o tamanho do índice.
Transact-SQL convenções de sintaxe
Sintaxe
sp_estimate_data_compression_savings
[ @schema_name = ] N'schema_name'
, [ @object_name = ] N'object_name'
, [ @index_id = ] index_id
, [ @partition_number = ] partition_number
, [ @data_compression = ] N'data_compression'
[ , [ @xml_compression = ] xml_compression ]
[ ; ]
Arguments
[@schema_name =] N'schema_name'
O nome do esquema da base de dados que contém a tabela ou a vista indexada.
@schema_name é sysname, sem predefinição. Se @schema_name for NULL, é utilizado o esquema padrão do utilizador atual.
@object_name [ = ] N'object_name'
O nome da tabela ou da vista indexada onde se encontra o índice. @object_name é sysname, sem padrão.
[ @index_id = ] index_id
A ID do índice. @index_id é int, e pode ser um dos seguintes valores:
- o número ID de um índice
NULL-
0se object_id for um monte
Para devolver informação para todos os índices de uma tabela base ou vista, especifique NULL. Se especificar NULL, também deve especificar NULL para @partition_number.
[ @partition_number = ] partition_number
O número de partição no objeto. @partition_number é int, e pode ser um dos seguintes valores:
- O número de partição de um índice ou heap
NULL-
1para um índice ou heap não particionado
Para especificar a partição, também pode especificar a função $PARTITION . Para devolver informação para todas as partições do objeto proprietário, especifique NULL.
[ @data_compression = ] N'data_compression'
Especifica o tipo de compressão a avaliar. @data_compression é nvarchar(60), e pode ser um dos seguintes valores:
NONEROWPAGECOLUMNSTORECOLUMNSTORE_ARCHIVE
Para SQL Server 2022 (16.x) e versões posteriores, NULL também é um valor possível.
@data_compression não pode ser NULL se @xml_compression for NULL.
[ @xml_compression = ] xml_compression
Aplica-se a: SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada SQL do Azure
Especifica se deve calcular poupanças para compressão XML. @xml_compression é bit, e pode ter um dos seguintes valores:
-
NULL(padrão) 01
@xml_compression não pode ser NULL se @data_compression for NULL.
Valores de código de retorno
0 (sucesso) ou 1 (fracasso).
Conjunto de resultados
O conjunto de resultados seguinte é devolvido para fornecer o tamanho atual e estimado da tabela, índice ou partição.
| Nome da coluna | Tipo de dados | Description |
|---|---|---|
object_name |
sysname | Nome da tabela ou da vista indexada. |
schema_name |
sysname | Esquema da tabela ou vista indexada. |
index_id |
int | ID de índice de um índice:0 = Heap1 = Índice agrupado>1 = Índice não agrupado |
partition_number |
int | Número de 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 tal como existe atualmente. |
size_with_requested_compression_setting (KB) |
bigint | Tamanho estimado da tabela, índice ou partição que utiliza a definição de compressão solicitada; e, se aplicável, o fator de preenchimento existente, assumindo que não há fragmentação. |
sample_size_with_current_compression_setting (KB) |
bigint | Tamanho da amostra com a configuração atual de compressão. Este tamanho inclui qualquer fragmentação. |
sample_size_with_requested_compression_setting (KB) |
bigint | Tamanho da amostra criada usando a configuração de compressão solicitada; e, se aplicável, o fator de preenchimento existente e sem fragmentação. |
Observações
Use sp_estimate_data_compression_savings para estimar as poupanças que podem ocorrer ao ativar uma tabela ou partição para linha, página, armazenamento de colunas, arquivo de colunas ou compressão XML. Por exemplo, se o tamanho médio da linha puder ser reduzido em 40 por cento, pode-se potencialmente reduzir o tamanho do objeto em 40 por cento. Pode não conseguir poupança de espaço porque isso depende do fator de preenchimento e do tamanho da fila. Por exemplo, se tiver uma linha com 8.000 bytes e reduzir o seu tamanho em 40 por cento, ainda pode caber apenas uma linha numa página de dados. Não há poupanças.
Se os resultados de executar sp_estimate_data_compression_savings numa tabela ou índice não comprimido indicarem que o tamanho irá aumentar, isso significa que muitas linhas usam quase toda a precisão dos tipos de dados, e a adição do pequeno overhead necessário para o formato comprimido é maior do que as poupanças da compressão. Neste caso raro, não ative a compressão.
Se uma tabela já estiver ativada para compressão, pode usar sp_estimate_data_compression_savings para estimar o tamanho médio da linha se a tabela estiver não comprimida.
Um bloqueio partilhado de intenção (IS) é adquirido na mesa durante esta operação. Se um bloqueio IS não puder ser obtido, o procedimento é bloqueado. A tabela é varrida sob o nível de isolamento padrão de leitura comprometida.
Se a configuração de compressão solicitada for igual à configuração atual de compressão, o procedimento armazenado devolve o tamanho estimado sem fragmentação de dados, usando o fator de preenchimento existente para os índices no objeto de origem.
Se o ID de índice ou partição não existir, não são retornados resultados.
Permissions
Requer SELECT permissão na tabela, VIEW DATABASE STATE e VIEW DEFINITION na base de dados que contém a tabela e em tempdb.
Limitações
No SQL Server 2017 (14.x) e versões anteriores, este procedimento não se aplicava aos índices de column store e, por isso, não aceitava os parâmetros COLUMNSTORE de compressão de dados e COLUMNSTORE_ARCHIVE. No SQL Server 2019 (15.x) e versões posteriores, bem como no Azure SQL Database e Azure SQL Managed Instance, os índices de column store podem ser usados tanto como objeto fonte para estimativa como tipo de compressão solicitado.
Quando Memory-Optimized Metadados TempDB está ativado, a criação de índices de coluna em tabelas temporárias não é suportada. Devido a esta limitação, sp_estimate_data_compression_savings não é suportado com os COLUMNSTORE parâmetros de compressão de dados and COLUMNSTORE_ARCHIVE quando Memory-Optimized Metadados do TempDB está ativado.
Considerações para índices de coluna
A partir do SQL Server 2019 (15.x), e no Azure SQL Database e Azure SQL Managed Instance, sp_estimate_compression_savings suporta estimar tanto a compressão de arquivos de colunas como de armazenamento de colunas. Ao contrário da compressão de páginas e linhas, aplicar compressão columnstore a um objeto requer a criação de um novo índice columnstore. Por esta razão, ao utilizar as COLUMNSTORE opções e COLUMNSTORE_ARCHIVE deste procedimento, o tipo do objeto fonte fornecido ao procedimento determina o tipo de índice de coluna usado para a estimativa do tamanho comprimido. A tabela seguinte ilustra os objetos de referência usados para estimar a poupança de compressão para cada tipo de objeto fonte quando o parâmetro @data_compression está definido para ou COLUMNSTORECOLUMNSTORE_ARCHIVE.
| Objeto fonte | Objeto de referência |
|---|---|
| **Heap | Índice columnstore agrupado |
| Índice agrupado | Índice columnstore agrupado |
| Índice não agrupado | Índice columnstore não agrupado (incluindo as colunas-chave e quaisquer colunas incluídas do índice não agrupado fornecido, e a coluna de partição da tabela, se existir) |
| Índice de coluna não agrupado | Índice de columnstore não agrupado (incluindo as mesmas colunas do índice de columnstore não agrupado fornecido) |
| Índice de armazenamento em colunas agrupado | Índice columnstore agrupado |
Observação
Ao estimar compressão columnstore a partir de um objeto fonte rowstore (índice clusterizado, índice não clusterizado ou heap), se houver colunas no objeto fonte que tenham um tipo de dado não suportado num índice columnstore, sp_estimate_compression_savings falhará com um erro.
De forma semelhante, quando o parâmetro de @data_compression está definido para NONE, ROW, ou PAGE o objeto fonte é um índice de coluna de armazenamento, a tabela seguinte delineia os objetos de referência utilizados.
| Objeto fonte | Objeto de referência |
|---|---|
| Índice de armazenamento em colunas agrupado | Área dinâmica para dados |
| Índice de coluna não agrupado | Índice não agrupado (incluindo as colunas contidas no índice columnstore não agrupado como colunas chave, e a coluna de partição da tabela, se existir, como coluna incluída) |
Observação
Ao estimar compressão rowstore (NENHUMA, LINHA ou PÁGINA) a partir de um objeto fonte columnstore, certifique-se de que o índice de origem não contém mais de 32 colunas chave, pois este é o limite suportado num índice rowstore (não clusterizado).
Examples
Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que pode ser descarregado da página inicial de Exemplos e Projetos da Comunidade do Microsoft SQL Server.
A. Poupanças estimativas com compressão ROW
O exemplo seguinte estima o tamanho da Production.WorkOrderRouting tabela se for comprimida usando ROW compressão.
EXECUTE sys.sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW';
GO
B. Estimar poupanças com compressão PAGE e XML
Aplica-se a: SQL Server 2022 (16.x) e versões posteriores
O exemplo seguinte estima o tamanho da Production.ProductModel tabela se for comprimida usando PAGE compressão e o valor @xml_compression estiver ativado.
EXECUTE sys.sp_estimate_data_compression_savings 'Production', 'ProductModel', NULL, NULL, 'PAGE', 1;
GO
Conteúdo relacionado
- CRIAR TABELA (Transact-SQL)
- CRIAR ÍNDICE (Transact-SQL)
- sys.partitions (Transact-SQL)
- Procedimentos armazenados do Mecanismo de Banco de Dados (Transact-SQL)
- de implementação de compressão Unicode