sp_spaceused (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Die sp_spaceused gespeicherte Systemprozedur zeigt eine der folgenden Optionen an:

  • Die Anzahl von Zeilen, reserviertem Speicherplatz und Speicherplatz, der von einer Tabelle, indizierten Ansicht oder Dienstbrokerwarteschlange in der aktuellen Datenbank verwendet wird

  • der reservierte und von der gesamten Datenbank verwendete Speicherplatz

Transact-SQL-Syntaxkonventionen

Syntax

sp_spaceused
    [ [ @objname = ] N'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 (z. B sp_spaceused (@objname= N'Table1');. ) angegeben werden, anstatt die Ordnungsposition von Parametern zu verwenden.

[ @objname = ] N'objname'

Der qualifizierte oder nicht qualifizierte Name der Tabelle, der indizierten Ansicht oder der Warteschlange, für die Informationen zur Speicherplatznutzung angefordert werden. @objname ist nvarchar(776), mit einem Standardwert von NULL. 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 die Ergebnisse für die gesamte Datenbank zurückgegeben.

Hinweis

Das Azure Synapse Analytics and Analytics Platform System (PDW) unterstützt nur Datenbank- und Tabellenobjekte.

[ @updateusage = ] 'updateusage'

Gibt an, DBCC UPDATEUSAGE dass informationen zur Speicherplatznutzung aktualisiert werden sollen. @updateusage ist varchar(5) mit einem Standardwert von false. Wenn @objname nicht angegeben ist, wird die Anweisung für die gesamte Datenbank ausgeführt. Andernfalls wird die Anweisung auf @objname ausgeführt. Werte können true oder false sein.

[ @mode = ] 'Mode'

Gibt den Bereich der Ergebnisse an. Bei einer gestreckten Tabelle oder Datenbank können Sie mit dem @mode-Parameter 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) und der Azure SQL-Datenbank veraltet. Diese Funktion wird in einer zukünftigen Version der Datenbank-Engine entfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.

@mode ist varchar(11) und kann einer dieser Werte sein.

Wert Beschreibung
ALL (Standardwert) Gibt die Speicherstatistiken des Objekts oder der Datenbank zurück, einschließlich des lokalen Teils und des Remoteteils.
LOCAL_ONLY Gibt die Speicherstatistik nur des lokalen Teils des Objekts oder der Datenbank zurück. Wenn das Objekt oder die Datenbank nicht stretchfähig ist, werden die gleichen Statistiken wie bei @mode zurückgegeben ALL.
REMOTE_ONLY Gibt die Speicherstatistik nur des Remoteteils 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, ist aber tatsächlich fehlgeschlagen.

[ @oneresultset = ] oneresultset

Gibt an, ob ein einzelnes Resultset zurückgegeben werden soll. @oneresultset ist Bit und kann einer der folgenden Werte sein:

Wert Beschreibung
0 (Standardwert) Wenn @objname null ist oder nicht angegeben ist, werden zwei Resultsets zurückgegeben.
1 Wenn @objname nicht angegeben wird NULL , wird ein einzelnes Resultset zurückgegeben.

[ @include_total_xtp_storage = ] include_total_xtp_storage

Gilt für: SQL Server 2017 (14.x) und höhere Versionen und SQL-Datenbank

Wenn @oneresultset auf 1 festgelegt ist, bestimmt dieser Parameter, ob das einzelne Resultset Spalten für MEMORY_OPTIMIZED_DATA den Speicher enthält. @include_total_xtp_storage ist bit, mit einem Standardwert von 0. If 1, XTP columns are included in the resultset.

Rückgabecodewerte

0 (erfolgreich) oder 1 Fehler.

Resultset

Wenn @objname ausgelassen wird und der Wert von @oneresultset lautet 0, werden die folgenden Resultsets zurückgegeben, um aktuelle Datenbankgrößeninformationen 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.
unallocated space varchar(18) Speicherplatz in der Datenbank, der nicht für Datenbankobjekte reserviert ist.
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 ist 1, wird der folgende einzelne Resultset zurückgegeben, um aktuelle Datenbankgrößeninformationen 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.
unallocated space varchar(18) Speicherplatz in der Datenbank, der nicht für Datenbankobjekte reserviert ist.
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 dynamische Verwaltungsansichten, um entsprechende Größeninformationen abzurufen.
rows char(20) Anzahl der Zeilen in der Tabelle. Wenn das angegebene Objekt eine Dienstbrokerwarteschlange 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 an Speicherplatz, der von Daten in @objname verwendet wird.
index_size varchar(18) Gesamtmenge an Speicherplatz, der von Indizes in @objname verwendet wird.
unused varchar(18) Gesamtmenge des reservierten Speicherplatzes für @objname , aber noch nicht verwendet.

Dieser Modus ist die Standardeinstellung, wenn keine Parameter angegeben werden. Die folgenden Resultsets werden zurückgegeben, die Informationen zur Größe der Datenträgerdatenbank angeben.

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, enthält dieser Wert die Gesamtgröße aller Prüfpunktdateien in der Dateigruppe.
unallocated space varchar(18) Speicherplatz in der Datenbank, der nicht für Datenbankobjekte reserviert ist. Wenn die Datenbank über eine MEMORY_OPTIMIZED_DATA Dateigruppe verfügt, enthält dieser Wert die Gesamtgröße der Prüfpunktdateien mit dem Status PRECREATED in der Dateigruppe.

Platz, der von Tabellen in der Datenbank verwendet wird. Dieses Resultset spiegelt keine speicheroptimierten Tabellen wider, da keine Datenträgernutzung pro Tabelle vorhanden ist:

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 Status PRECREATEDin KB. Zählt zum nicht zugewiesenen Bereich in der Datenbank als Ganzes. Wenn beispielsweise 600.000 KB vordefinierte Prüfpunktdateien vorhanden sind, enthält 600000 KBdiese Spalte .
xtp_used varchar(18) Gesamtgröße der Prüfpunktdateien mit Status UNDER CONSTRUCTION, ACTIVE, und MERGE TARGET, in KB. Dieser Wert 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_TRUNCATIONin KB. Dieser Wert ist der Speicherplatz, der für Prüfpunktdateien verwendet wird, die auf sauber up warten, sobald der Protokollabzug erfolgt.

Wenn @objname nicht angegeben wird, lautet 1der Wert @oneresultset und @include_total_xtp_storage ist1, wird das folgende einzelne Resultset zurückgegeben, um aktuelle Datenbankgrößeninformationen bereitzustellen. Wenn @include_total_xtp_storage ist 0 (Standard), 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, enthält dieser Wert die Gesamtgröße aller Prüfpunktdateien in der Dateigruppe.
unallocated space varchar(18) Speicherplatz in der Datenbank, der nicht für Datenbankobjekte reserviert ist. Wenn die Datenbank über eine MEMORY_OPTIMIZED_DATA Dateigruppe verfügt, enthält dieser Wert die Gesamtgröße der Prüfpunktdateien 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_precreated1 varchar(18) Gesamtgröße der Prüfpunktdateien mit Status PRECREATEDin KB. Dieser Wert zählt zum nicht zugewiesenen Bereich in der Datenbank als Ganzes. Gibt zurück NULL , wenn die Datenbank nicht über eine MEMORY_OPTIMIZED_DATA Dateigruppe mit mindestens einem Container verfügt.
xtp_used1 varchar(18) Gesamtgröße der Prüfpunktdateien mit Status UNDER CONSTRUCTION, ACTIVE, und MERGE TARGET, in KB. Dieser Wert ist der Speicherplatz, der aktiv für Daten in speicheroptimierten Tabellen verwendet wird. Gibt zurück NULL , wenn die Datenbank nicht über eine MEMORY_OPTIMIZED_DATA Dateigruppe mit mindestens einem Container verfügt.
xtp_pending_truncation1 varchar(18) Gesamtgröße der Prüfpunktdateien mit Status WAITING_FOR_LOG_TRUNCATIONin KB. Dieser Wert ist der Speicherplatz, der für Prüfpunktdateien verwendet wird, die auf sauber up warten, sobald der Protokollabzug erfolgt. Gibt zurück NULL , wenn die Datenbank nicht über eine MEMORY_OPTIMIZED_DATA Dateigruppe mit mindestens einem Container verfügt.

1 Nur enthalten, wenn @include_total_xtp_storage auf 1.

Hinweise

Der database_size Wert ist im Allgemeinen größer als die Summe, da reservedunallocated space + er die Größe von Protokolldateien enthält, aber unallocated_spacereserved nur Datenseiten in Betracht ziehen kann. In einigen Fällen mit Azure Synapse Analytics ist diese Aussage möglicherweise nicht wahr.

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

Wenn die Raumnutzung für eine Datenbank oder ein Objekt, das ein räumlicher Index ist, berechnet wird, enthalten die Spalten der Raumgröße, z database_size. B. , reservedund index_sizedie 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 Ansichten und sys.partitions Katalogen hinsichtlich des von jeder Tabelle verwendeten Speicherplatzes vor. Es gibt einige Situationen, z. B. nach dem Ablegen eines Indexes, wenn die Leerzeicheninformationen für die Tabelle möglicherweise nicht aktuell sind. @updateusage können einige Zeit in großen Tabellen oder Datenbanken ausführen. Verwenden Sie @updateusage nur, wenn Sie vermuten, dass falsche Werte zurückgegeben werden, und wenn der Prozess keine negativen Auswirkungen auf andere Benutzer oder Prozesse in der Datenbank hat. Falls bevorzugt, DBCC UPDATEUSAGE kann 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 die Datenbank-Engine die Aufhebung der aktuellen Seitenzuordnungen sowie die zugehörigen Sperren, bis für die Transaktion ein Commit ausgeführt wurde. Verzögerte Ablagevorgänge lassen nicht sofort zugewiesenen Speicherplatz frei. Daher entsprechen die Werte, die unmittelbar nach dem Ablegen oder Abschneiden eines großen Objekts zurückgegeben sp_spaceused werden, möglicherweise nicht den tatsächlich verfügbaren Speicherplatz.

Berechtigungen

Die Berechtigung zum Ausführen sp_spaceused wird der öffentlichen Rolle gewährt. Nur Mitglieder der festen Datenbankrolle db_owner können den Parameter @updateusage angeben.

Beispiele

A. Anzeigen von Speicherplatzinformationen zu einer Tabelle

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

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

B. Anzeigen aktualisierter Speicherplatzinformationen zu einer Datenbank

Im folgenden Beispiel wird der in der aktuellen Datenbank verwendete Platz zusammengefasst und der optionale Parameter @updateusage verwendet, um sicherzustellen, dass aktuelle Werte zurückgegeben werden.

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

C. Anzeigen von Platznutzungsinformationen zur Remotetabelle, die einer Stretch-aktivierten Tabelle zugeordnet ist

Im folgenden Beispiel wird der von der Remotetabelle verwendete Platz zusammengefasst, der 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 StretchedAdventureWorks2022;
GO

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

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

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

USE AdventureWorks2022;
GO
EXEC sp_spaceused @oneresultset = 1;

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

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

USE WideWorldImporters
GO

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

F. Anzeigen von Platznutzungsinformationen für ein MEMORY_OPTIMIZED Tabellenobjekt 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