sp_spaceused (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

La sp_spaceused stored procedure di sistema visualizza:

  • numero di righe, spazio su disco riservato e spazio su disco usato da una tabella, una vista indicizzata o una coda di Service Broker nel database corrente

  • spazio su disco riservato e usato dall'intero database

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Nota

Questa sintassi non è supportata da pool SQL serverless in Azure Synapse Analytics.

Argomenti

Per Azure Synapse Analytics and Analytics Platform System (PDW), sp_spaceused è necessario specificare parametri denominati (ad esempio sp_spaceused (@objname= N'Table1');), anziché basarsi sulla posizione ordinale dei parametri.

[ @objname = ] N'objname'

Nome qualificato o non qualificato della tabella, della vista indicizzata o della coda per cui vengono richieste informazioni sull'utilizzo dello spazio. @objname è nvarchar(776), con il valore predefinito NULL. 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 non viene specificato @objname , vengono restituiti i risultati per l'intero database.

Nota

Azure Synapse Analytics and Analytics Platform System (PDW) supporta solo oggetti di database e tabelle.

[ @updateusage = ] 'updateusage'

Indica DBCC UPDATEUSAGE che deve essere eseguito per aggiornare le informazioni sull'utilizzo dello spazio. @updateusage è varchar(5), con il valore predefinito false. Quando @objname non viene specificato, l'istruzione viene eseguita nell'intero database. In caso contrario, l'istruzione viene eseguita in @objname. I valori possono essere true o false.

[ @mode = ] 'mode'

Indica l'ambito dei risultati. Per una tabella o un database esteso, il parametro @mode consente di includere o escludere la parte remota dell'oggetto. Per ulteriori informazioni, vedere Stretch Database.

Importante

Stretch Database è deprecato in SQL Server 2022 (16.x) e database SQL di Azure. Questa funzionalità verrà rimossa nelle versioni future del motore di database. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

@mode è varchar(11) e può essere uno di questi valori.

valore Descrizione
ALL (predefinito) Restituisce le statistiche di archiviazione dell'oggetto o del database, incluse sia la parte locale che la parte remota.
LOCAL_ONLY Restituisce le statistiche di archiviazione solo della parte locale dell'oggetto o del database. Se l'oggetto o il database non è abilitato per Stretch, restituisce le stesse statistiche di quando @mode è ALL.
REMOTE_ONLY Restituisce le statistiche di archiviazione solo della parte remota dell'oggetto o del database. Questa opzione genera un errore quando si verifica una delle condizioni seguenti:

La tabella non è abilitata per Stretch.

La tabella è abilitata per Stretch, ma non è mai stata abilitata la migrazione dei dati. In questo caso, la tabella remota non ha ancora uno schema.

L'utente ha eliminato manualmente la tabella remota.

Il provisioning dell'archivio dati remoto ha restituito lo stato Operazione riuscita, ma in realtà non è riuscito.

[ @oneresultset = ] oneresultset

Indica se restituire un singolo set di risultati. @oneresultset è bit e può essere uno di questi valori:

valore Descrizione
0 (predefinito) Quando @objname è null o non è specificato, vengono restituiti due set di risultati.
1 Quando @objname è o non è NULL specificato, viene restituito un singolo set di risultati.

[ @include_total_xtp_storage = ] include_total_xtp_storage

Si applica a: SQL Server 2017 (14.x) e versioni successive e database SQL

Quando @oneresultset è impostato su 1, questo parametro determina se il singolo set di risultati include colonne per MEMORY_OPTIMIZED_DATA l'archiviazione. @include_total_xtp_storage è bit, con il valore predefinito 0. Se 1, le colonne XTP vengono incluse nel set di risultati.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Set di risultati

Se @objname viene omesso e il valore di @oneresultset è 0, vengono restituiti i set di risultati seguenti per fornire informazioni sulle dimensioni correnti del database.

Nome colonna Tipo di dati Descrizione
database_name nvarchar(128) Nome del database corrente.
database_size varchar(18) Dimensioni del database corrente, espresse in megabyte. database_size include sia i file di dati che i file di log.
unallocated space varchar(18) Spazio nel database non riservato agli oggetti di database.
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 @objname viene omesso e il valore di @oneresultset è 1, viene restituito il set di risultati singolo seguente per fornire informazioni sulle dimensioni correnti del database.

Nome colonna Tipo di dati Descrizione
database_name nvarchar(128) Nome del database corrente.
database_size varchar(18) Dimensioni del database corrente, espresse in megabyte. database_size include sia i file di dati che i file di log.
unallocated space varchar(18) Spazio nel database non riservato agli oggetti di database.
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 si specifica @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 è obbligatorio, usare il sys.dm_db_partition_stats o sys.dm_db_index_physical_stats viste a gestione dinamica per ottenere informazioni sulle dimensioni equivalenti.
rows char(20) Numero di righe esistenti nella tabella. Se l'oggetto specificato è una coda di Service Broker, questa colonna indica il numero di messaggi nella coda.
reserved varchar(18) Quantità totale di spazio riservato per @objname.
data varchar(18) Quantità totale di spazio usata dai dati in @objname.
index_size varchar(18) Quantità totale di spazio usata dagli indici in @objname.
unused varchar(18) Quantità totale di spazio riservata per @objname ma non ancora usata.

Questa modalità è l'impostazione predefinita, quando non vengono specificati parametri. I set di risultati seguenti vengono restituiti dettagli sulle informazioni sulle dimensioni del database su disco.

Nome colonna Tipo di dati Descrizione
database_name nvarchar(128) Nome del database corrente.
database_size varchar(18) Dimensioni del database corrente, espresse in megabyte. database_size include sia i file di dati che i file di log. Se il database ha un MEMORY_OPTIMIZED_DATA filegroup, questo valore include le dimensioni totali su disco di tutti i file di checkpoint nel filegroup.
unallocated space varchar(18) Spazio nel database non riservato agli oggetti di database. Se il database ha un MEMORY_OPTIMIZED_DATA filegroup, questo valore include le dimensioni totali su disco dei file del checkpoint con stato PRECREATED nel filegroup.

Spazio utilizzato dalle tabelle nel database. Questo set di risultati non riflette le tabelle ottimizzate per la memoria, perché non esiste alcuna contabilità per tabella dell'utilizzo del disco:

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.

Il set di risultati seguente viene restituito solo se il database ha un MEMORY_OPTIMIZED_DATA filegroup con almeno un contenitore:

Nome colonna Tipo di dati Descrizione
xtp_precreated varchar(18) Dimensioni totali dei file di checkpoint con stato PRECREATED, in KB. Conta per lo spazio non allocato nel database nel suo complesso. Ad esempio, se sono presenti 600.000 KB di file di checkpoint creati in precedenza, questa colonna contiene 600000 KB.
xtp_used varchar(18) Dimensioni totali dei file di checkpoint con stati UNDER CONSTRUCTION, ACTIVEe MERGE TARGET, in KB. Questo valore è lo spazio su disco usato attivamente per i dati nelle tabelle ottimizzate per la memoria.
xtp_pending_truncation varchar(18) Dimensioni totali dei file di checkpoint con stato WAITING_FOR_LOG_TRUNCATION, in KB. Questo valore è lo spazio su disco usato per i file di checkpoint in attesa della pulizia, dopo il troncamento del log.

Se @objname viene omesso, il valore di @oneresultset è 1e @include_total_xtp_storage è 1, viene restituito il set di risultati singolo seguente per fornire informazioni sulle dimensioni correnti del database. Se @include_total_xtp_storage è 0 (impostazione predefinita), le ultime tre colonne vengono omesse.

Nome colonna Tipo di dati Descrizione
database_name nvarchar(128) Nome del database corrente.
database_size varchar(18) Dimensioni del database corrente, espresse in megabyte. database_size include sia i file di dati che i file di log. Se il database ha un MEMORY_OPTIMIZED_DATA filegroup, questo valore include le dimensioni totali su disco di tutti i file di checkpoint nel filegroup.
unallocated space varchar(18) Spazio nel database non riservato agli oggetti di database. Se il database ha un MEMORY_OPTIMIZED_DATA filegroup, questo valore include le dimensioni totali su disco dei file del checkpoint con stato PRECREATED nel filegroup.
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.
xtp_precreated 1 varchar(18) Dimensioni totali dei file di checkpoint con stato PRECREATED, in KB. Questo valore viene conteggiato per lo spazio non allocato nel database nel suo complesso. Restituisce NULL se il database non dispone di un MEMORY_OPTIMIZED_DATA filegroup con almeno un contenitore.
xtp_used 1 varchar(18) Dimensioni totali dei file di checkpoint con stati UNDER CONSTRUCTION, ACTIVEe MERGE TARGET, in KB. Questo valore è lo spazio su disco usato attivamente per i dati nelle tabelle ottimizzate per la memoria. Restituisce NULL se il database non dispone di un MEMORY_OPTIMIZED_DATA filegroup con almeno un contenitore.
xtp_pending_truncation 1 varchar(18) Dimensioni totali dei file di checkpoint con stato WAITING_FOR_LOG_TRUNCATION, in KB. Questo valore è lo spazio su disco usato per i file di checkpoint in attesa della pulizia, dopo il troncamento del log. Restituisce NULL se il database non dispone di un MEMORY_OPTIMIZED_DATA filegroup con almeno un contenitore.

1 È incluso solo se @include_total_xtp_storage è impostato su 1.

Osservazioni:

Il database_size valore è in genere maggiore della somma di perché include le dimensioni dei file di reservedunallocated space + log, ma considerare unallocated_space reserved solo le pagine di dati. In alcuni casi con Azure Synapse Analytics, questa istruzione potrebbe non essere vera.

Le pagine utilizzate dagli indici XML e dagli indici full-text sono incluse in index_size per entrambi i set di risultati. Quando si specifica @objname , vengono conteggiate anche le pagine per gli indici XML e gli indici full-text per l'oggetto nel totale reserved e index_size nei risultati.

Se l'utilizzo dello spazio viene calcolato per un database o un oggetto che è un indice spaziale, le colonne di dimensioni spazio, ad esempio database_size, reservede index_size, includono le dimensioni dell'indice spaziale.

Quando si specifica @updateusage, SQL Server motore di database analizza le pagine di dati nel database e apporta eventuali correzioni necessarie alle viste del sys.allocation_units catalogo e sys.partitions relative allo spazio di archiviazione usato da ogni tabella. Esistono alcune situazioni, ad esempio, dopo l'eliminazione di un indice, quando le informazioni sullo spazio per la tabella potrebbero non essere correnti. @updateusage può richiedere del tempo per l'esecuzione in tabelle o database di grandi dimensioni. Usare @updateusage solo quando si sospetta che vengano restituiti valori non corretti e quando il processo non ha effetti negativi su altri utenti o processi nel database. Se preferito, DBCC UPDATEUSAGE può essere eseguito separatamente.

Nota

Quando si eliminano o ricompilano indici di grandi dimensioni o si eliminano o si troncano tabelle di grandi dimensioni, l'motore di database rinvia le deallozioni di pagina effettive e i relativi blocchi associati fino a quando non viene eseguito il commit della transazione. Le operazioni di rilascio posticipate non rilasciano immediatamente lo spazio allocato. Pertanto, i valori restituiti immediatamente sp_spaceused dopo l'eliminazione o il troncamento di un oggetto di grandi dimensioni potrebbero non riflettere lo spazio su disco effettivo disponibile.

Autorizzazioni

L'autorizzazione per l'esecuzione sp_spaceused viene concessa al ruolo pubblico . Solo tramite i membri del ruolo predefinito del database db_owner può essere specificato il parametro @updateusage .

Esempi

R. Visualizzare le informazioni sullo spazio su disco su una tabella

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

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

B. Visualizzare le informazioni sullo spazio aggiornato su un database

Nell'esempio seguente viene riepilogato lo spazio utilizzato nel database corrente e viene utilizzato il parametro facoltativo @updateusage per assicurarsi che vengano restituiti i valori correnti.

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

C. Visualizzare le informazioni sull'utilizzo dello spazio sulla tabella remota associata a una tabella abilitata per l'estensione

Nell'esempio seguente viene riepilogato lo spazio utilizzato dalla tabella remota associata a una tabella abilitata per l'estensione usando l'argomento @mode per specificare la destinazione remota. Per altre informazioni, vedere Stretch Database.

USE StretchedAdventureWorks2022;
GO

EXEC sp_spaceused N'Purchasing.Vendor', @mode = 'REMOTE_ONLY';

D. Visualizzare le informazioni sull'utilizzo dello spazio per un database in un singolo set di risultati

Nell'esempio seguente viene riepilogato l'utilizzo dello spazio per il database corrente in un singolo set di risultati.

USE AdventureWorks2022;
GO
EXEC sp_spaceused @oneresultset = 1;

E. Visualizzare le informazioni sull'utilizzo dello spazio per un database con almeno un MEMORY_OPTIMIZED file group in un singolo set di risultati

Nell'esempio seguente viene riepilogato l'utilizzo dello spazio per il database corrente con almeno un MEMORY_OPTIMIZED filegroup in un singolo set di risultati.

USE WideWorldImporters
GO

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

F. Visualizzare le informazioni sull'utilizzo dello spazio per un oggetto tabella MEMORY_OPTIMIZED in un database

Nell'esempio seguente viene riepilogato l'utilizzo dello spazio per un MEMORY_OPTIMIZED oggetto tabella nel database corrente con almeno un MEMORY_OPTIMIZED filegroup.

USE WideWorldImporters
GO

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