sp_spaceused (Transact-SQL)

Gilt für: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPlatform System (PDW)

Zeigt die Anzahl der Zeilen, den reservierten Speicherplatz und den Speicherplatz an, der von einer Tabelle, indizierten Sicht oder Service Broker-Warteschlange in der aktuellen Datenbank verwendet wird, oder zeigt den reservierten und von der gesamten Datenbank verwendeten Speicherplatz an.

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 Azure Synapse Analytics and Analytics Platform System (PDW) sp_spaceused müssen benannte Parameter angegeben werden (z. Bsp_spaceused (@objname= N'Table1');. anstatt sich auf die Ordnungsposition von 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 ist, werden Ergebnisse für die gesamte Datenbank zurückgegeben.
objname ist nvarchar(776) mit dem Standardwert NULL.

Hinweis

Azure Synapse Analytics and Analytics Platform System (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 ist, wird die -Anweisung für die gesamte Datenbank ausgeführt. Andernfalls wird die Anweisung unter objname ausgeführt. Werte können true oder false sein. updateusage ist varchar(5) mit dem Standardwert false.

[ @mode = ] 'mode' Gibt den Bereich der Ergebnisse an. Bei einer gestreckten Tabelle oder Datenbank können Sie mit dem Modusparameter den Remoteteil des Objekts einschließen oder ausschließen. Weitere Informationen finden Sie unter Stretch Database.

Wichtig

Stretch Database ist in SQL Server 2022 (16.x) veraltet. Dieses Feature wird in einer künftigen Version von Microsoft SQL Server entfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.

Das Argument mode kann die folgenden Werte aufweisen:

Wert BESCHREIBUNG
ALL Gibt die Speicherstatistiken des Objekts oder der Datenbank zurück, einschließlich des lokalen Teils und des Remoteteils.
LOCAL_ONLY Gibt die Speicherstatistiken nur für den lokalen Teil des Objekts oder der Datenbank zurück. Wenn das Objekt oder die Datenbank nicht Stretch-fähig ist, gibt die gleichen Statistiken wie when @mode = ALL zurück.
REMOTE_ONLY Gibt die Speicherstatistiken nur für den Remoteteil 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 noch nie die Datenmigration 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, aber tatsächlich ist es fehlgeschlagen.

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

[ @oneresultset = ] oneresultset Gibt an, ob ein einzelnes Resultset zurückgegeben werden soll. Das Argument oneresultset kann die folgenden Werte aufweisen:

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

oneresultset ist bit mit dem Standardwert 0.

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

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

Rückgabecodewerte

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

Resultsets

Wenn objname ausgelassen wird und der Wert von oneresultset 0 ist, werden die folgenden Resultsets zurückgegeben, um Informationen zur aktuellen Datenbankgröße bereitzustellen.

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 umfasst sowohl Daten- als auch Protokolldateien.
Nicht zugeordneter 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.
unused varchar(18) Gesamter für Objekte in der Datenbank zugeordneter, aber noch nicht verwendeter Speicherplatz.

Wenn objname ausgelassen wird und der Wert von oneresultset 1 ist, wird das folgende einzelne Resultset zurückgegeben, um informationen zur aktuellen Datenbankgröße bereitzustellen.

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 zugeordneter 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.
unused varchar(18) Gesamter für Objekte in der Datenbank zugeordneter, aber noch nicht verwendeter Speicherplatz.

Wenn objname angegeben ist, 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 sys.dm_db_partition_stats oder sys.dm_db_index_physical_stats dynamischen Verwaltungssichten, um Informationen zur entsprechenden Größe abzurufen.
rows char(20) Anzahl der Zeilen in der Tabelle. Wenn das angegebene Objekt eine Service Broker-Warteschlange ist, gibt diese Spalte die Anzahl der Nachrichten in der Warteschlange an.
reserved varchar(18) Gesamtmenge des reservierten Speicherplatzes für objname.
data varchar(18) Gesamtmenge des von Daten in objname verwendeten Speicherplatzes.
index_size varchar(18) Gesamtmenge des von Indizes in objname verwendeten Speicherplatzes.
unused varchar(18) Gesamtmenge des für objname reservierten, aber noch nicht verwendeten Speicherplatzes.

Dies ist der Standardmodus, wenn keine Parameter angegeben werden. Die folgenden Resultsets werden mit Detaillierten Informationen zur Datenbankgröße 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, umfasst dies die Gesamtgröße aller Prüfpunktdateien in der Dateigruppe.
nicht zugeordneter Speicherplatz varchar(18) Speicherplatz in der Datenbank, der nicht für Datenbankobjekte zugeordnet wurde. Wenn die Datenbank über eine MEMORY_OPTIMIZED_DATA Dateigruppe verfügt, umfasst dies die Gesamtgröße der Prüfpunktdateien auf dem Datenträger mit dem Status PRECREATED in der Dateigruppe.

Speicherplatz, der von Tabellen in der Datenbank verwendet wird: (Dieses Resultset spiegelt keine speicheroptimierten Tabellen wider, da es keine tabellenbasierte Abrechnung der Datenträgernutzung gibt)

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.
unused 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 zustand PRECREATED in KB. Zählt zum nicht zugeordneten Speicherplatz in der Datenbank als Ganzes. [Wenn beispielsweise 600.000 KB an vordefinierten Prüfpunktdateien vorhanden sind, enthält diese Spalte "600000 KB"]
xtp_used varchar(18) Gesamtgröße der Prüfpunktdateien mit den Zustä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 status WAITING_FOR_LOG_TRUNCATION in KB. Dies ist der Speicherplatz, der für Prüfpunktdateien verwendet wird, die auf die Bereinigung warten, sobald das Protokollabschneiden erfolgt ist.

Wenn objname nicht angegeben wird, der Wert von oneresultset 1 und include_total_xtp_storage 1 ist, wird das folgende einzelne Resultset zurückgegeben, um aktuelle Datenbankgrößeninformationen bereitzustellen. Wenn include_total_xtp_storage 0 (Standard) ist, werden die letzten drei Spalten weggelassen.

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, umfasst dies die Gesamtgröße aller Prüfpunktdateien in der Dateigruppe.
nicht zugeordneter Speicherplatz varchar(18) Speicherplatz in der Datenbank, der nicht für Datenbankobjekte zugeordnet wurde. Wenn die Datenbank über eine MEMORY_OPTIMIZED_DATA Dateigruppe verfügt, umfasst dies die Gesamtgröße der Prüfpunktdateien auf dem Datenträger mit dem Status PRECREATED in der Dateigruppe.
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.
unused 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 zustand PRECREATED in KB. Dies gilt für den nicht zugeordneten Speicherplatz in der Datenbank als Ganzes. Gibt NULL zurück, wenn die Datenbank nicht über eine memory_optimized_data Dateigruppe mit mindestens einem Container verfügt. *Diese Spalte ist nur enthalten, wenn @include_total_xtp_storage=1*.
xtp_used varchar(18) Gesamtgröße der Prüfpunktdateien mit den Zustä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 nicht über eine memory_optimized_data Dateigruppe mit mindestens einem Container verfügt. *Diese Spalte ist nur enthalten, wenn @include_total_xtp_storage=1*.
xtp_pending_truncation varchar(18) Gesamtgröße der Prüfpunktdateien mit status WAITING_FOR_LOG_TRUNCATION in KB. Dies ist der Speicherplatz, der für Prüfpunktdateien verwendet wird, die auf die Bereinigung warten, sobald das Protokollabschneiden erfolgt ist. Gibt NULL zurück, wenn die Datenbank nicht über eine memory_optimized_data Dateigruppe 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 zugeordneten Speicherplatzes , da er die Größe von Protokolldateien enthält, aber reservierte und unallocated_space nur Datenseiten berücksichtigen. In einigen Fällen mit Azure Synapse Analytics ist diese Aussage möglicherweise nicht richtig.

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

Wenn die Speicherplatznutzung für eine Datenbank oder ein Objekt mit einem räumlichen Index berechnet wird, enthalten die Spalten mit leerer Größe, z. B. database_size, reserviert und index_size, die Größe des räumlichen Indexes.

Wenn updateusage angegeben wird, überprüft die SQL Server Datenbank-Engine die Datenseiten in der Datenbank und nimmt alle erforderlichen Korrekturen an den sys.allocation_units- und sys.partitions-Katalogsichten hinsichtlich des von jeder Tabelle verwendeten Speicherplatzes 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. Updateusage kann einige Zeit in Anspruch nehmen, um in großen Tabellen oder Datenbanken ausgeführt zu werden. Verwenden Sie updateusage nur, wenn Sie vermuten, dass falsche Werte zurückgegeben werden und wenn der Prozess keine nachteiligen 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 oder große Tabellen löschen oder abschneiden, verschiebt die Datenbank-Engine die tatsächlichen Seiten-Deallocations und die zugehörigen Sperren bis nach dem Commit der Transaktion. Bei verzögerten Löschvorgängen wird der zugeordnete Speicherplatz nicht sofort freigegeben. Daher spiegeln die von sp_spaceused unmittelbar nach dem Löschen oder Abschneiden eines großen Objekts zurückgegebenen Werte 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 AdventureWorks2016;  
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 AdventureWorks2016;  
GO  
EXEC sp_spaceused @updateusage = N'TRUE';  
GO  

C. Anzeigen von Speicherplatznutzungsinformationen zur 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 Argument @mode 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 Informationen zur Speicherplatznutzung 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 Informationen zur Speicherplatznutzung für eine Datenbank mit mindestens einer MEMORY_OPTIMIZED Dateigruppe 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 Informationen zur Speicherplatznutzung für ein MEMORY_OPTIMIZED Tabellenobjekts in einer Datenbank.

Im folgenden Beispiel wird die Speicherplatznutzung für ein MEMORY_OPTIMIZED Tabellenobjekt in der aktuellen Datenbank mit mindestens einer MEMORY_OPTIMIZED Dateigruppe 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)