sp_spaceused (Transact-SQL)

Anwendungsbereich: JaSQL Server (alle unterstützten Versionen) JaAzure SQL-Datenbank JaVerwaltete Azure SQL-Instanz JaAzure Synapse Analytics JaParallel Data Warehouse

Gibt die Anzahl der Zeilen sowie den zugeordneten und verwendeten Speicherplatz für eine bestimmte Tabelle, eine indizierte Sicht oder eine Service Broker-Warteschlange in der aktuellen Datenbank bzw. den zugeordneten und verwendeten Speicherplatz für die gesamte Datenbank an.

Symbol für Themenlink Transact-SQL-Syntaxkonventionen

Syntax

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

Hinweis

Diese Syntax wird vom serverlosen SQL-Pool in Azure Synapse Analytics nicht unterstützt.

Argumente

Für und muss benannte Parameter angeben (z. B. anstatt sich auf die Azure Synapse Analytics Analytics-Plattformsystem (PDW) Ordnungsposition von sp_spaceused sp_spaceused (@objname= N'Table1'); Parametern zu verlassen.

[ @objname = ] 'objname'

Der qualifizierte oder nicht qualifizierte Name der Tabelle, indizierten Sicht oder Warteschlange, für die Informationen zur Speicherverwendung angefordert werden. Anführungszeichen sind nur erforderlich, wenn ein qualifizierter Objektname angegeben wird. Bei Angabe eines vollqualifizierten Objektnamens (einschließlich eines Datenbanknamens) muss der Datenbankname der Name der aktuellen Datenbank sein.
Wenn objname nicht angegeben wird, werden Ergebnisse für die gesamte Datenbank zurückgegeben.
objname ist vom Wert nvarchar(776) und hat den Standardwert NULL.

Hinweis

Azure Synapse Analytics und Analytics-Plattformsystem (PDW) unterstützen nur Datenbank- und Tabellenobjekte.

[ @updateusage = ] 'updateusage' Gibt an, dass DBCC UPDATEUSAGE ausgeführt werden soll, um Informationen zur Speicherplatznutzung zu aktualisieren. Wenn objname nicht angegeben wird, wird die Anweisung für die gesamte Datenbank ausgeführt. Andernfalls wird die -Anweisung auf objname ausgeführt. Die Werte können true oder false sein. updateusage ist vom Standardwert varchar(5) .

[ @mode = ] 'mode' Gibt den Bereich der Ergebnisse an. Bei einer Stretchingtabelle oder -datenbank können Sie mit dem Mode-Parameter den Remoteteil des Objekts ein- oder ausschließen. Weitere Informationen finden Sie unter Stretch Database.

Das mode-Argument kann die folgenden Werte haben:

Wert BESCHREIBUNG
ALL Gibt die Speicherstatistiken des Objekts oder der Datenbank zurück, einschließlich des lokalen Teils und des Remoteanteils.
LOCAL_ONLY Gibt die Speicherstatistiken nur des lokalen Teils des Objekts oder der Datenbank zurück. Wenn das Objekt oder die Datenbank nicht Stretch-fähig ist, gibt die gleiche Statistik zurück wie when @mode = ALL.
REMOTE_ONLY Gibt die Speicherstatistiken nur des Remotebereichs des Objekts oder der Datenbank zurück. Diese Option löst einen Fehler aus, wenn eine der folgenden Bedingungen zutrifft:

Die Tabelle ist für Stretch nicht aktiviert.

Die Tabelle ist für Stretch aktiviert, aber Sie haben die Datenmigration noch nie aktiviert. In diesem Fall verfügt die Remotetabelle noch nicht über ein Schema.

Der Benutzer hat die Remotetabelle manuell gelöscht.

Die Bereitstellung des Remotedatenarchivs hat den Status Erfolg zurückgegeben, ist aber tatsächlich fehlgeschlagen.

mode ist varchar(11) mit dem Standardwert N'ALL'.

[ @oneresultset = ] oneresultset Gibt an, ob ein einzelnes ResultSet zurückgeben werden soll. Das oneresultset-Argument kann die folgenden Werte haben:

Wert BESCHREIBUNG
0 Wenn @ objname NULL ist oder nicht angegeben wird, werden zwei Result Sets zurückgegeben. Zwei Result Sets sind das Standardverhalten.
1 Wenn @ objname = NULL oder nicht angegeben ist, wird ein einzelnes ResultSet zurückgegeben.

oneresultset ist bit und hat den Standardwert 0.

[ @include_total_xtp_storage] 'include_total_xtp_storage' Gilt für: SQL Server 2017 (14.x) , SQL-Datenbank .

Bei @oneresultset =1 bestimmt der -Parameter, ob das einzelne Resultset Spalten für MEMORY_OPTIMIZED_DATA @include_total_xtp_storage enthält. Der Standardwert ist 0, d. h. die XTP-Spalten sind standardmäßig nicht im Resultset enthalten (wenn der Parameter weggelassen wird).

Rückgabecodewerte

„0“ (erfolgreich) oder „1“ (fehlerhaft)

Resultsets

Wenn objname weggelassen wird und der Wert von oneresultset 0 ist, werden die folgenden Resultsets zurückgegeben, um aktuelle Informationen zur Datenbankgröße zu liefern.

Spaltenname Datentyp BESCHREIBUNG
database_name nvarchar(128) Der Name der aktuellen Datenbank.
database_size varchar(18) Die Größe der aktuellen Datenbank in Megabyte. database_size enthält sowohl Daten- als auch Protokolldateien.
Nicht zugewiesener Speicherplatz varchar(18) Speicherplatz in der Datenbank, der nicht für Datenbankobjekte zugeordnet wurde.
Spaltenname Datentyp BESCHREIBUNG
reserved varchar(18) Gesamter von Objekten in der Datenbank zugeordneter Speicherplatz.
data varchar(18) Gesamter für Daten verwendeter Speicherplatz.
index_size varchar(18) Gesamter für Indizes verwendeter Speicherplatz.
Unbenutzte varchar(18) Gesamter für Objekte in der Datenbank zugeordneter, aber noch nicht verwendeter Speicherplatz.

Wenn objname weggelassen wird und der Wert von oneresultset 1 ist, wird das folgende einzelne Resultseset zurückgegeben, um aktuelle Informationen zur Datenbankgröße zu liefern.

Spaltenname Datentyp BESCHREIBUNG
database_name nvarchar(128) Der Name der aktuellen Datenbank.
database_size varchar(18) Die Größe der aktuellen Datenbank in Megabyte. database_size enthält sowohl Daten- als auch Protokolldateien.
Nicht zugewiesener Speicherplatz varchar(18) Speicherplatz in der Datenbank, der nicht für Datenbankobjekte zugeordnet wurde.
reserved varchar(18) Gesamter von Objekten in der Datenbank zugeordneter Speicherplatz.
data varchar(18) Gesamter für Daten verwendeter Speicherplatz.
index_size varchar(18) Gesamter für Indizes verwendeter Speicherplatz.
Unbenutzte varchar(18) Gesamter für Objekte in der Datenbank zugeordneter, aber noch nicht verwendeter Speicherplatz.

Wenn objname angegeben wird, wird das folgende Resultset für das angegebene Objekt zurückgegeben.

Spaltenname Datentyp BESCHREIBUNG
name nvarchar(128) Name des Objekts, für das Informationen zur Speicherverwendung angefordert wurden.

Der Schemaname des Objekts wird nicht zurückgegeben. Wenn der Schemaname erforderlich ist, verwenden Sie die dynamischen sys.dm_db_partition_stats oder sys.dm_db_index_physical_stats, um informationen zur entsprechenden Größe zu erhalten.
rows char(20) Anzahl der Zeilen in der Tabelle. Wenn es sich bei dem angegebenen Objekt um eine Service Broker-Warteschlange handelt, wird in dieser Spalte die Anzahl der in der Warteschlange vorhandenen Nachrichten angegeben.
reserved varchar(18) Gesamtmenge des reservierten Speicherplatzes für objname.
data varchar(18) Gesamtmenge des Speicherplatzes, der von Daten in objname verwendet wird.
index_size varchar(18) Gesamtmenge des speicherplatzes, der von Indizes in objname verwendet wird.
Unbenutzte varchar(18) Gesamtmenge des für objname reservierten, aber noch nicht verwendeten Speicherplatzes.

Dies ist der Standardmodus, wenn keine Parameter angegeben werden. Die folgenden Result Sets werden mit Details zur Größe der Datenbank auf dem Datenträger zurückgegeben.

Spaltenname Datentyp BESCHREIBUNG
database_name nvarchar(128) Der Name der aktuellen Datenbank.
database_size varchar(18) Die Größe der aktuellen Datenbank in Megabyte. database_size enthält sowohl Daten- als auch Protokolldateien. Wenn die Datenbank über eine MEMORY_OPTIMIZED_DATA Dateigruppe verfügt, schließt dies die Gesamtgröße aller Prüfpunktdateien in der Dateigruppe auf dem Datenträger ein.
Nicht zugewiesener Speicherplatz varchar(18) Speicherplatz in der Datenbank, der nicht für Datenbankobjekte zugeordnet wurde. Wenn die Datenbank über eine MEMORY_OPTIMIZED_DATA dateigroup verfügt, schließt dies die Gesamtgröße der Prüfpunktdateien auf dem Datenträger mit dem Status PRECREATED in der Dateigruppe ein.

Speicherplatz, der von Tabellen in der Datenbank verwendet wird: (Dieses Resultset spiegelt keine speicheroptimierten Tabellen wider, da die Datenträgernutzung nicht pro Tabelle abbucht)

Spaltenname Datentyp BESCHREIBUNG
reserved varchar(18) Gesamter von Objekten in der Datenbank zugeordneter Speicherplatz.
data varchar(18) Gesamter für Daten verwendeter Speicherplatz.
index_size varchar(18) Gesamter für Indizes verwendeter Speicherplatz.
Unbenutzte varchar(18) Gesamter für Objekte in der Datenbank zugeordneter, aber noch nicht verwendeter Speicherplatz.

Das folgende Resultset wird NUR zurückgegeben, wenn die Datenbank über eine MEMORY_OPTIMIZED_DATA-Dateigruppe mit mindestens einem Container verfügt:

Spaltenname Datentyp BESCHREIBUNG
xtp_precreated varchar(18) Gesamtgröße der Prüfpunktdateien mit dem Status PRECREATED in KB. Zählt zum nicht zugewiesenen Speicherplatz in der Datenbank als Ganzes. [Wenn beispielsweise 600.000 KB voraberstellende Prüfpunktdateien enthalten sind, enthält diese Spalte "600000 KB"]
xtp_used varchar(18) Gesamtgröße der Prüfpunktdateien mit den Zuzuständen UNDER CONSTRUCTION, ACTIVE und MERGE TARGET in KB. Dies ist der Speicherplatz, der aktiv für Daten in speicheroptimierten Tabellen verwendet wird.
xtp_pending_truncation varchar(18) Gesamtgröße der Prüfpunktdateien mit WAITING_FOR_LOG_TRUNCATION In KB. Dies ist der Speicherplatz, der für Prüfpunktdateien verwendet wird, die auf eine Bereinigung warten, sobald die Protokoll abgeschnitten wird.

Wenn objname weggelassen wird, der Wert von oneresultset 1 und include_total_xtp_storage 1 ist, wird das folgende einzelne Resultseset zurückgegeben, um aktuelle Informationen zur Datenbankgröße zu liefern. Wenn include_total_xtp_storage 0 (Standard) ist, werden die letzten drei Spalten ausgelassen.

Spaltenname Datentyp BESCHREIBUNG
database_name nvarchar(128) Der Name der aktuellen Datenbank.
database_size varchar(18) Die Größe der aktuellen Datenbank in Megabyte. database_size enthält sowohl Daten- als auch Protokolldateien. Wenn die Datenbank über eine MEMORY_OPTIMIZED_DATA Dateigruppe verfügt, schließt dies die Gesamtgröße aller Prüfpunktdateien in der Dateigruppe auf dem Datenträger ein.
Nicht zugewiesener Speicherplatz varchar(18) Speicherplatz in der Datenbank, der nicht für Datenbankobjekte zugeordnet wurde. Wenn die Datenbank über eine MEMORY_OPTIMIZED_DATA dateigroup verfügt, schließt dies die Gesamtgröße der Prüfpunktdateien auf dem Datenträger mit dem Status PRECREATED in der Dateigruppe ein.
reserved varchar(18) Gesamter von Objekten in der Datenbank zugeordneter Speicherplatz.
data varchar(18) Gesamter für Daten verwendeter Speicherplatz.
index_size varchar(18) Gesamter für Indizes verwendeter Speicherplatz.
Unbenutzte varchar(18) Gesamter für Objekte in der Datenbank zugeordneter, aber noch nicht verwendeter Speicherplatz.
xtp_precreated varchar(18) Gesamtgröße der Prüfpunktdateien mit dem Status PRECREATED in KB. Dies zählt zum nicht zugewiesenen Speicherplatz in der Gesamten Datenbank. Gibt NULL zurück, wenn die Datenbank über keine memory_optimized_data mit mindestens einem Container verfügt. Diese Spalte ist nur enthalten, wenn @include_total_xtp_storage =1 ist.
xtp_used varchar(18) Gesamtgröße der Prüfpunktdateien mit den Zuzuständen UNDER CONSTRUCTION, ACTIVE und MERGE TARGET in KB. Dies ist der Speicherplatz, der aktiv für Daten in speicheroptimierten Tabellen verwendet wird. Gibt NULL zurück, wenn die Datenbank über keine memory_optimized_data mit mindestens einem Container verfügt. Diese Spalte ist nur enthalten, wenn @include_total_xtp_storage =1 ist.
xtp_pending_truncation varchar(18) Gesamtgröße der Prüfpunktdateien mit WAITING_FOR_LOG_TRUNCATION In KB. Dies ist der Speicherplatz, der für Prüfpunktdateien verwendet wird, die auf eine Bereinigung warten, sobald die Protokoll abgeschnitten wird. Gibt NULL zurück, wenn die Datenbank über keine memory_optimized_data mit mindestens einem Container verfügt. Diese Spalte ist nur enthalten, wenn @include_total_xtp_storage=1 .

Bemerkungen

database_size ist im Allgemeinen größer als die Summe des reservierten nicht zugewiesenen Speicherplatzes, da er die Größe der Protokolldateien enthält, aber reservierte und unallocated_space nur + Datenseiten berücksichtigen. In einigen Fällen mit Azure Synapse Analytics ist diese Anweisung möglicherweise nicht true.

Seiten, die von XML-Indizes und Volltextindizes verwendet werden, sind in index_size für beide Result Sets enthalten. Wenn objname angegeben wird, werden die Seiten für die XML-Indizes und Volltextindizes für das Objekt auch in die gesamt reservierten und index_size gezählt.

Wenn die Speicherplatznutzung für eine Datenbank oder ein Objekt mit einem räumlichen Index berechnet wird, enthalten die Spalten der Raumgröße wie database_size, reserved und index_size die Größe des räumlichen Indexes.

Wenn updateusage angegeben wird, scannt die Datenseiten in der Datenbank und nehmen alle erforderlichen Korrekturen an den SQL Server-Datenbank-Engine sys.allocation_units- und sys.partitions-Katalogsichten in Bezug auf den von den einzelnen Tabellen verwendeten Speicherplatz vor. In einigen Situationen, z. B. nachdem ein Index gelöscht wurde, entsprechen die Speicherplatzinformationen für die Tabelle möglicherweise nicht dem aktuellen Stand. Die Ausführung von updateusage für große Tabellen oder Datenbanken kann einige Zeit dauern. Verwenden Sie updateusage nur, wenn Sie vermuten, dass falsche Werte zurückgegeben werden und der Prozess keine negativen Auswirkungen auf andere Benutzer oder Prozesse in der Datenbank hat. DBCC UPDATEUSAGE kann auch separat ausgeführt werden.

Hinweis

Wenn Sie große Indizes löschen oder neu erstellen bzw. wenn Sie große Tabellen löschen oder abschneiden, verzögert Datenbank-Engine die Aufhebung der aktuellen Seitenzuordnungen sowie die zugehörigen Sperren, bis für die Transaktion ein Commit ausgeführt wird. Bei verzögerten Löschvorgängen wird der zugeordnete Speicherplatz nicht sofort freigegeben. Daher spiegeln die von der sp_spaceused nach dem Löschen oder Abschneiden eines großen Objekts möglicherweise nicht den tatsächlich verfügbaren Speicherplatz wider.

Berechtigungen

Die Berechtigung zum Ausführen von sp_spaceused wird der public -Rolle erteilt. Nur Mitglieder der festen Datenbankrolle db_owner können den Parameter @updateusage angeben.

Beispiele

A. Anzeigen von Speicherplatzinformationen für eine Tabelle

Im folgenden Beispiel werden Speicherplatzinformationen für die Vendor-Tabelle und deren Indizes abgerufen.

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

B. Anzeigen aktualisierter Speicherplatzinformationen für eine Datenbank

Das folgende Beispiel ermöglicht eine Zusammenfassung des in der aktuellen Datenbank verwendeten Speicherplatzes. Durch Verwendung des optionalen Parameters @updateusage wird sichergestellt, dass aktuelle Werte zurückgegeben werden.

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

C. Anzeigen von Speicherplatznutzungsinformationen über die Remotetabelle, die einer Stretch-fähigen Tabelle zugeordnet ist

Im folgenden Beispiel wird der Speicherplatz zusammengefasst, der von der Remotetabelle verwendet wird, die einer Stretch-fähigen Tabelle zugeordnet ist, indem das @ Mode-Argument verwendet wird, um das Remoteziel anzugeben. Weitere Informationen finden Sie unter Stretch Database.

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

D: Anzeigen von Speicherplatznutzungsinformationen für eine Datenbank in einem einzelnen Resultset

Im folgenden Beispiel wird die Speicherplatznutzung für die aktuelle Datenbank in einem einzelnen Resultset zusammengefasst.

USE AdventureWorks2016  
GO  
EXEC sp_spaceused @oneresultset = 1  

E. Anzeigen von Speicherplatznutzungsinformationen für eine Datenbank mit mindestens einer MEMORY_OPTIMIZED in einem einzelnen Resultset

Im folgenden Beispiel wird die Speicherplatznutzung für die aktuelle Datenbank mit mindestens einer MEMORY_OPTIMIZED-Dateigruppe in einem einzelnen Resultset zusammengefasst.

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

F. Anzeigen von Speicherplatzverwendungsinformationen für MEMORY_OPTIMIZED Tabellenobjekts in einer Datenbank.

Im folgenden Beispiel wird die Speicherplatzverwendung für ein MEMORY_OPTIMIZED-Tabellenobjekt in der aktuellen Datenbank mit mindestens einer MEMORY_OPTIMIZED zusammengefasst.

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

Weitere Informationen

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)
Gespeicherte Systemprozeduren (Transact-SQL)