sp_spaceused (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)

Exibe o número de linhas, o espaço em disco reservado e o espaço em disco usado por uma tabela, exibição indexada ou fila do Service Broker no banco de dados atual, ou exibe o espaço em disco reservado e usado por todo o banco de dados.

Convenções de sintaxe de Transact-SQL

Sintaxe

sp_spaceused [[ @objname = ] 'objname' ]   
[, [ @updateusage = ] 'updateusage' ]  
[, [ @mode = ] 'mode' ]  
[, [ @oneresultset = ] oneresultset ]  
[, [ @include_total_xtp_storage = ] include_total_xtp_storage ]

Observação

Não há suporte a essa sintaxe para o pool de SQL sem servidor no Azure Synapse Analytics.

Argumentos

Para o Azure Synapse Analytics and Analytics Platform System (PDW), deve especificar parâmetros nomeados (por exemplosp_spaceused (@objname= N'Table1');, sp_spaceused em vez de depender da posição ordinal dos parâmetros.

[ @objname = ] 'objname'

É o nome qualificado ou não qualificado da tabela, da exibição indexada ou da fila para a qual as informações de uso do espaço são solicitadas. As aspas são obrigatórias apenas se um nome de objeto qualificado for especificado. Se um nome de objeto totalmente qualificado (incluindo um nome de banco de dados) for fornecido, o nome de banco de dados deve ser o nome do banco de dados atual.
Se objname não for especificado, os resultados serão retornados para todo o banco de dados.
objname é nvarchar(776), com um padrão de NULL.

Observação

O Azure Synapse Analytics and Analytics Platform System (PDW) oferece suporte apenas a objetos de banco de dados e tabela.

[ @updateusage = ] 'updateusage' Indica que DBCC UPDATEUSAGE deve ser executado para atualizar as informações de uso do espaço. Quando objname não é especificado, a instrução é executada em todo o banco de dados, caso contrário, a instrução é executada em objname. Os valores podem ser true ou false. updateusage é varchar(5), com um padrão de false.

[ @mode = ] 'mode' Indica o escopo dos resultados. Para uma tabela ou banco de dados estendido, o parâmetro mode permite incluir ou excluir a parte remota do objeto. Para obter mais informações, consulte Stretch Database.

Importante

O banco de dados de ampliação foi preterido no SQL Server 2022 (16.x) e no Banco de Dados SQL do Azure. Esse recurso será removido em uma versão futura do mecanismo de banco de dados. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

O argumento mode pode ter os seguintes valores:

Valor Descrição
ALL Retorna as estatísticas de armazenamento do objeto ou banco de dados, incluindo a parte local e a parte remota.
LOCAL_ONLY Retorna as estatísticas de armazenamento somente da parte local do objeto ou banco de dados. Se o objeto ou banco de dados não estiver habilitado para Stretch, retornará as mesmas estatísticas de quando @mode = ALL.
REMOTE_ONLY Retorna as estatísticas de armazenamento somente da parte remota do objeto ou banco de dados. Essa opção gera um erro quando uma das seguintes condições for verdadeira:

A tabela não está habilitada para Stretch.

A tabela está habilitada para Stretch, mas você nunca habilitou a migração de dados. Nesse caso, a tabela remota ainda não tem um esquema.

O usuário descartou manualmente a tabela remota.

O provisionamento do arquivamento de dados remoto retornou um status de Êxito, mas na verdade falhou.

mode é varchar(11), com um padrão de N'ALL'.

[ @oneresultset = ] oneresultset Indica se um único conjunto de resultados deve ser retornado. O argumento oneresultset pode ter os seguintes valores:

Valor Descrição
0 Quando @objname é nulo ou não é especificado, dois conjuntos de resultados são retornados. Dois conjuntos de resultados é o comportamento padrão.
1 Quando @objname = null ou não é especificado, um único conjunto de resultados é retornado.

OneResultSet é bit, com um padrão de 0.

[ @include_total_xtp_storage] 'include_total_xtp_storage'Aplica-se a: SQL Server 2017 (14.x), Banco de dados SQL.

Quando @oneresultset=1, o parâmetro @include_total_xtp_storage determina se o conjunto de resultados único inclui colunas para armazenamento MEMORY_OPTIMIZED_DATA. O valor padrão é 0, ou seja, por padrão (se o parâmetro for omitido) as colunas XTP não são incluídas no conjunto de resultados.

Valores do código de retorno

0 (êxito) ou 1 (falha)

Conjuntos de resultados

Se objname for omitido e o valor de oneresultset for 0, os seguintes conjuntos de resultados serão retornados para fornecer informações sobre o tamanho atual do banco de dados.

Nome da coluna Tipo de dados Descrição
database_name nvarchar(128) Nome do banco de dados atual.
database_size varcar(18) Tamanho do banco de dados atual em megabytes. database_size inclui arquivos de dados e de log.
espaço não alocado varcar(18) Espaço no banco de dados que não foi reservado para objetos de banco de dados.
Nome da coluna Tipo de dados Descrição
reserved varcar(18) Total de espaço alocado por objetos no banco de dados.
data varcar(18) Total de espaço usado por dados.
index_size varcar(18) Total de espaço usado por índices.
Utilizadas varcar(18) Total de espaço reservado para objetos no banco de dados, mas ainda não usado.

Se objname for omitido e o valor de oneresultset for 1, o seguinte conjunto de resultados único será retornado para fornecer informações sobre o tamanho atual do banco de dados.

Nome da coluna Tipo de dados Descrição
database_name nvarchar(128) Nome do banco de dados atual.
database_size varcar(18) Tamanho do banco de dados atual em megabytes. database_size inclui arquivos de dados e de log.
espaço não alocado varcar(18) Espaço no banco de dados que não foi reservado para objetos de banco de dados.
reserved varcar(18) Total de espaço alocado por objetos no banco de dados.
data varcar(18) Total de espaço usado por dados.
index_size varcar(18) Total de espaço usado por índices.
Utilizadas varcar(18) Total de espaço reservado para objetos no banco de dados, mas ainda não usado.

Se objname for especificado, o seguinte conjunto de resultados será retornado para o objeto especificado.

Nome da coluna Tipo de dados Descrição
name nvarchar(128) Nome do objeto para o qual foram solicitadas informações de uso do espaço.

O nome de esquema do objeto não é retornado. Se o nome do esquema for necessário, use as exibições de gerenciamento dinâmico sys.dm_db_partition_stats ou sys.dm_db_index_physical_stats para obter informações de tamanho equivalente.
rows Char(20) Número de linhas existentes na tabela. Se o objeto especificado for uma fila do Service Broker, essa coluna indicará o número de mensagens na fila.
reserved varcar(18) Quantidade total de espaço reservado para objname.
data varcar(18) Quantidade total de espaço usado pelos dados no objname.
index_size varcar(18) Quantidade total de espaço usado pelos índices no objname.
Utilizadas varcar(18) Quantidade total de espaço reservado para objname , mas ainda não utilizado.

Este é o modo padrão, quando nenhum parâmetro é especificado. Os conjuntos de resultados a seguir são retornados detalhando informações de tamanho do banco de dados em disco.

Nome da coluna Tipo de dados Descrição
database_name nvarchar(128) Nome do banco de dados atual.
database_size varcar(18) Tamanho do banco de dados atual em megabytes. database_size inclui arquivos de dados e de log. Se o banco de dados tiver um grupo de arquivos MEMORY_OPTIMIZED_DATA, isso incluirá o tamanho total no disco de todos os arquivos de ponto de verificação no grupo de arquivos.
espaço não alocado varcar(18) Espaço no banco de dados que não foi reservado para objetos de banco de dados. Se o banco de dados tiver um grupo de arquivos MEMORY_OPTIMIZED_DATA, isso incluirá o tamanho total no disco dos arquivos de ponto de verificação com o estado PRECREATED no grupo de arquivos.

Espaço usado por tabelas no banco de dados: (esse conjunto de resultados não reflete tabelas otimizadas para memória, pois não há contabilização por tabela do uso do disco)

Nome da coluna Tipo de dados Descrição
reserved varcar(18) Total de espaço alocado por objetos no banco de dados.
data varcar(18) Total de espaço usado por dados.
index_size varcar(18) Total de espaço usado por índices.
Utilizadas varcar(18) Total de espaço reservado para objetos no banco de dados, mas ainda não usado.

O seguinte conjunto de resultados é retornado SOMENTE SE o banco de dados tiver um grupo de arquivos MEMORY_OPTIMIZED_DATA com pelo menos um contêiner:

Nome da coluna Tipo de dados Descrição
xtp_precreated varcar(18) Tamanho total de arquivos de ponto de verificação com estado PRECREATED, em KB. Conta para o espaço não alocado no banco de dados como um todo. [Por exemplo, se houver 600.000 KB de arquivos de ponto de verificação pré-criados, esta coluna conterá '600000 KB']
xtp_used varcar(18) Tamanho total de arquivos de ponto de verificação com os estados UNDER CONSTRUCTION, ACTIVE e MERGE TARGET, em KB. Esse é o espaço em disco usado ativamente para dados em tabelas otimizadas para memória.
xtp_pending_truncation varcar(18) Tamanho total dos arquivos de ponto de verificação com WAITING_FOR_LOG_TRUNCATION de estado, em KB. Esse é o espaço em disco usado para arquivos de ponto de verificação que estão aguardando limpeza, uma vez que o truncamento de log acontece.

Se objname for omitido, o valor de oneresultset for 1 e include_total_xtp_storage for 1, o conjunto de resultados único a seguir será retornado para fornecer informações sobre o tamanho atual do banco de dados. Se include_total_xtp_storage for 0 (o padrão), as três últimas colunas serão omitidas.

Nome da coluna Tipo de dados Descrição
database_name nvarchar(128) Nome do banco de dados atual.
database_size varcar(18) Tamanho do banco de dados atual em megabytes. database_size inclui arquivos de dados e de log. Se o banco de dados tiver um grupo de arquivos MEMORY_OPTIMIZED_DATA, isso incluirá o tamanho total no disco de todos os arquivos de ponto de verificação no grupo de arquivos.
espaço não alocado varcar(18) Espaço no banco de dados que não foi reservado para objetos de banco de dados. Se o banco de dados tiver um grupo de arquivos MEMORY_OPTIMIZED_DATA, isso incluirá o tamanho total no disco dos arquivos de ponto de verificação com o estado PRECREATED no grupo de arquivos.
reserved varcar(18) Total de espaço alocado por objetos no banco de dados.
data varcar(18) Total de espaço usado por dados.
index_size varcar(18) Total de espaço usado por índices.
Utilizadas varcar(18) Total de espaço reservado para objetos no banco de dados, mas ainda não usado.
xtp_precreated varcar(18) Tamanho total de arquivos de ponto de verificação com estado PRECREATED, em KB. Isso conta para o espaço não alocado no banco de dados como um todo. Retorna NULL se o banco de dados não tiver um grupo de arquivos memory_optimized_data com pelo menos um contêiner. *Esta coluna só está incluída se @include_total_xtp_storage=1*.
xtp_used varcar(18) Tamanho total de arquivos de ponto de verificação com os estados UNDER CONSTRUCTION, ACTIVE e MERGE TARGET, em KB. Esse é o espaço em disco usado ativamente para dados em tabelas otimizadas para memória. Retorna NULL se o banco de dados não tiver um grupo de arquivos memory_optimized_data com pelo menos um contêiner. *Esta coluna só está incluída se @include_total_xtp_storage=1*.
xtp_pending_truncation varcar(18) Tamanho total dos arquivos de ponto de verificação com WAITING_FOR_LOG_TRUNCATION de estado, em KB. Esse é o espaço em disco usado para arquivos de ponto de verificação que estão aguardando limpeza, uma vez que o truncamento de log acontece. Retorna NULL se o banco de dados não tiver um grupo de arquivos memory_optimized_data com pelo menos um contêiner. Esta coluna só será incluída se @include_total_xtp_storage=1.

Comentários

database_size é geralmente maior do que a soma do espaço reservado + não alocado porque inclui o tamanho dos arquivos de log, mas reservado e unallocated_space considerar apenas páginas de dados. Em alguns casos com o Azure Synapse Analytics, essa declaração pode não ser verdadeira.

As páginas usadas por índices XML e índices de texto completo são incluídas no index_size para ambos os conjuntos de resultados. Quando objname é especificado, as páginas para os índices XML e índices de texto completo para o objeto também são contadas no total reservado e index_size resultados.

Se o uso de espaço for calculado para um banco de dados ou um objeto que tenha um índice espacial, as colunas de tamanho de espaço, como database_size, reservado e index_size, incluirão o tamanho do índice espacial.

Quando updateusage é especificado, o Mecanismo de Banco de Dados do SQL Server verifica as páginas de dados no banco de dados e faz as correções necessárias nas exibições de catálogo sys.allocation_units e sys.partitions em relação ao espaço de armazenamento usado por cada tabela. Há algumas situações, por exemplo, depois de um índice ser descartado, em que as informações de espaço da tabela talvez não sejam atuais. UpdateUsage pode levar algum tempo para ser executado em grandes tabelas ou bancos de dados. Use updateusage somente quando suspeitar que valores incorretos estão sendo retornados e quando o processo não terá um efeito adverso em outros usuários ou processos no banco de dados. Se preferir, DBCC UPDATEUSAGE pode ser executado separadamente.

Observação

Quando você descarta ou reconstrói índices grandes, ou descarta ou trunca tabelas grandes, o Mecanismo de Banco de Dados adia as desalocações de página atuais e seus bloqueios associados, até depois que a transação confirme. Operações de cancelamento adiadas não libertam espaço alocado imediatamente. Portanto, os valores retornados por sp_spaceused imediatamente após soltar ou truncar um objeto grande podem não refletir o espaço em disco real disponível.

Permissões

A permissão para executar sp_spaceused é concedida à função public . Somente os membros da função de banco de dados fixa db_owner podem especificar o parâmetro @updateusage.

Exemplos

R. Exibindo informações de espaço em disco sobre uma tabela

O exemplo a seguir relata informações de espaço em disco para a tabela Vendor e seus índices.

USE AdventureWorks2022;  
GO  
EXEC sp_spaceused N'Purchasing.Vendor';  
GO  

B. Exibindo informações atualizadas de espaço sobre um banco de dados

O exemplo a seguir resume o espaço usado no banco de dados atual e usa o parâmetro @updateusage opcional para assegurar que os valores corretos sejam retornados.

USE AdventureWorks2022;  
GO  
EXEC sp_spaceused @updateusage = N'TRUE';  
GO  

C. Exibindo informações de uso de espaço sobre a tabela remota associada a uma tabela habilitada para Stretch

O exemplo a seguir resume o espaço usado pela tabela remota associada a uma tabela habilitada para Stretch usando o argumento @mode para especificar o destino remoto. Para obter mais informações, consulte Stretch Database.

USE StretchedAdventureWorks2022  
GO  
EXEC sp_spaceused N'Purchasing.Vendor', @mode = 'REMOTE_ONLY'  

D. Exibindo informações de uso de espaço para um banco de dados em um único conjunto de resultados

O exemplo a seguir resume o uso de espaço para o banco de dados atual em um único conjunto de resultados.

USE AdventureWorks2022  
GO  
EXEC sp_spaceused @oneresultset = 1  

E. Exibindo informações de uso de espaço para um banco de dados com pelo menos um grupo de arquivos MEMORY_OPTIMIZED em um único conjunto de resultados

O exemplo a seguir resume o uso de espaço para o banco de dados atual com pelo menos um grupo de arquivos MEMORY_OPTIMIZED em um único conjunto de resultados.

USE WideWorldImporters
GO
EXEC sp_spaceused @updateusage = 'FALSE', @mode = 'ALL', @oneresultset = '1', @include_total_xtp_storage = '1';
GO

F. Exibindo informações de uso de espaço para um objeto de tabela MEMORY_OPTIMIZED em um banco de dados.

O exemplo a seguir resume o uso de espaço para um objeto de tabela MEMORY_OPTIMIZED no banco de dados atual com pelo menos um grupo de arquivos MEMORY_OPTIMIZED.

USE WideWorldImporters
GO
EXEC sp_spaceused
@objname = N'VehicleTemparatures',
@updateusage = 'FALSE',
@mode = 'ALL',
@oneresultset = '0',
@include_total_xtp_storage = '1';
GO

Confira também

CREATE INDEX (Transact-SQL)
CREATE TABLE (Transact-SQL)
DBCC UPDATEUSAGE (Transact-SQL)
SQL Server Service Broker
sys.allocation_units (Transact-SQL)
sys.indexes (Transact-SQL)
sys.index_columns (Transact-SQL)
sys.objects (Transact-SQL)
sys.partitions (Transact-SQL)
Procedimentos armazenados do sistema (Transact-SQL)