sp_spaceused (Transact-SQL)

Visualizza il numero di righe, lo spazio su disco riservato e lo spazio su disco utilizzato per una tabella, una vista indicizzata o una coda di Service Broker nel database corrente oppure visualizza lo spazio su disco riservato e utilizzato per l'intero database.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sp_spaceused [[ @objname = ] 'objname' ] 
[,[ @updateusage = ] 'updateusage' ]

Argomenti

  • [ @objname=] 'objname'
    Nome completo o non qualificato della tabella, della vista indicizzata o della coda per cui si desidera ottenere informazioni sull'utilizzo dello spazio. Le virgolette sono necessarie solo se viene specificato un nome di oggetto completo. Se viene specificato un nome di oggetto completo, ovvero contenente un nome di database, il nome del database deve essere quello del database corrente.

    Se objname viene omesso, i risultati restituiti si riferiscono all'intero database.

    objname è di tipo nvarchar(776) e il valore predefinito è NULL.

  • [ @updateusage=] 'updateusage'
    Esegue l'istruzione DBCC UPDATEUSAGE per aggiornare le informazioni sull'utilizzo dello spazio. Quando objname viene omesso, questa istruzione viene eseguita sull'intero database. In caso contrario, viene eseguita su objname. I possibili valori sono true e false. updateusage è di tipo varchar(5) e il valore predefinito è false.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Set di risultati

Se objname viene omesso, vengono restituiti i set di risultati seguenti per fornire informazioni sulle dimensioni del database corrente.

Nome colonna

Tipo di dati

Descrizione

database_name

nvarchar(128)

Nome del database corrente.

database_size

varchar(18)

Dimensione del database corrente, espressa in megabyte. Il valore di database_size si riferisce sia ai file di dati che ai file di log.

unallocated space

varchar(18)

Spazio nel database non riservato per i relativi oggetti.

Nome colonna

Tipo di dati

Descrizione

reserved

varchar(18)

Quantità totale di spazio allocato per gli oggetti del database.

data

varchar(18)

Quantità totale di spazio utilizzato per i dati.

index_size

varchar(18)

Quantità totale di spazio utilizzato per gli indici.

unused

varchar(18)

Quantità totale di spazio riservato per gli oggetti del database ma non ancora utilizzato.

Se viene specificato objname, viene restituito il set di risultati seguente per l'oggetto specificato.

Nome colonna

Tipo di dati

Descrizione

name

nvarchar(128)

Nome dell'oggetto per cui sono state richieste informazioni sull'utilizzo dello spazio.

Il nome dello schema dell'oggetto non viene restituito. Se il nome dello schema è necessario, utilizzare la vista a gestione dinamica di sys.dm_db_partition_stats o sys.dm_db_index_physical_stats per ottenere informazioni sulle dimensioni equivalenti.

rows

char(11)

Numero di righe esistenti nella tabella. Se l'oggetto specificato è una coda di Service Broker, in questa colonna viene indicato il numero di messaggi presenti nella coda.

reserved

varchar(18)

Quantità totale di spazio riservato per objname.

data

varchar(18)

Quantità totale di spazio utilizzato per i dati di objname.

index_size

varchar(18)

Quantità totale di spazio utilizzato per gli indici di objname.

unused

varchar(18)

Quantità totale di spazio riservato per objname ma non ancora utilizzato.

Osservazioni

Il valore di database_size è sempre maggiore della somma di reserved e unallocated space perché include la dimensione dei file di log, mentre reserved e unallocated_space si riferiscono solo alle pagine di dati.

Le pagine utilizzate per indici XML e indici full-text vengono incluse in index_size per entrambi i set di risultati. Quando viene specificato objname, nei risultati totali di reserved e index_size viene tenuto conto anche delle pagine utilizzate per gli indici XML e gli indici full-text dell'oggetto.

Se l'utilizzo dello spazio viene calcolato per un database o un oggetto con un indice spaziale, le colonne relative alla dimensione dello spazio, ad esempio database_size, reservede index_size, includono la dimensione dell'indice spaziale.

Quando viene specificato updateusage, Motore di database di SQL Server esegue una scansione delle pagine di dati nel database e apporta le correzioni necessarie nelle viste del catalogo sys.allocation_units e sys.partitions per quanto concerne lo spazio di archiviazione utilizzato per ogni tabella. In alcune situazioni, ad esempio dopo l'eliminazione di un indice, le informazioni sullo spazio restituite per la tabella non sono aggiornate. L'esecuzione di updateusage su tabelle o database di grandi dimensioni può richiedere tempi lunghi. Utilizzare updateusage solo quando si presume che i valori restituiti non siano corretti e quando l'operazione non influisce in modo negativo su altri utenti o processi del database. Se lo si preferisce, è possibile eseguire l'istruzione DBCC UPDATEUSAGE separatamente.

[!NOTA]

Quando si eliminano o si ricostruiscono indici di grandi dimensioni oppure si eliminano o si troncano tabelle di grandi dimensioni, Motore di database posticipa le effettive deallocazioni delle pagine e i blocchi associati fino al termine del commit della transazione. Le operazioni di eliminazione posticipate non rendono immediatamente disponibile lo spazio allocato. Pertanto, i valori restituiti da sp_spaceused immediatamente dopo l'eliminazione o il troncamento di un oggetto di grandi dimensioni potrebbero non corrispondere allo spazio su disco effettivamente disponibile. Per ulteriori informazioni sulle allocazioni posticipate, vedere Eliminazione e ricostruzione di oggetti di grandi dimensioni.

Autorizzazioni

L'autorizzazione per eseguire sp_spaceused è concessa al ruolo public. Solo i membri del ruolo predefinito del database db_owner possono specificare il parametro @updateusage.

Esempi

A. Visualizzazione di informazioni relative allo spazio su disco per una tabella

Nell'esempio seguente vengono visualizzate informazioni relative allo spazio su disco per la tabella Vendor e i relativi indici.

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

B. Visualizzazione di informazioni sullo spazio aggiornate per un database

Nell'esempio seguente viene riepilogato lo spazio utilizzato nel database corrente e viene utilizzato il parametro facoltativo @updateusage per garantire la restituzione di valori aggiornati.

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