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 , ACTIVE e 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 è 1
e @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 , ACTIVE e 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 reserved
unallocated 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
, reserved
e 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'VehicleTemperatures',
@updateusage = 'FALSE',
@mode = 'ALL',
@oneresultset = '0',
@include_total_xtp_storage = '1';
GO