Freigeben über


sp_spaceused (Transact-SQL)

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.

Gilt für: SQL Server (SQL Server 2008 bis aktuelle Version).

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Syntax

sp_spaceused [[ @objname = ] 'objname' ] 
[,[ @updateusage = ] 'updateusage' ]

Argumente

  • [ @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, beziehen sich die zurückgegebenen Werte auf die gesamte Datenbank.

    objname ist vom Datentyp nvarchar(776) und hat den Standardwert NULL.

  • [ @updateusage=] 'updateusage'
    Gibt an, dass DBCC UPDATEUSAGE ausgeführt werden soll, um die Informationen zur Speicherplatzverwendung zu aktualisieren. Wenn objname nicht angegeben ist, wird die Anweisung für die gesamte Datenbank ausgeführt; andernfalls wird die Anweisung für objname ausgeführt. Die Werte true und false sind möglich. updateusage ist vom Datentyp varchar(5). Der Standardwert ist false.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Resultsets

Wenn objname weggelassen wird, werden die folgenden Resultsets zurückgegeben, um aktuelle Informationen zur 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 schließt sowohl Daten als auch Protokolldateien ein.

unallocated space

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 angegeben ist, wird für das betreffende Objekt das folgende Resultset 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, können Sie mit der dynamischen Verwaltungssicht sys.dm_db_partition_stats oder sys.dm_db_index_physical_stats entsprechende Größeninformationen abrufen.

rows

char(11)

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)

Gesamter zugeordneter Speicherplatz für objname.

data

varchar(18)

Gesamter für Daten in objname verwendeter Speicherplatz.

index_size

varchar(18)

Gesamter für Indizes in objname verwendeter Speicherplatz.

unused

varchar(18)

Gesamter für objname zugeordneter, aber noch nicht verwendeter Speicherplatz.

Hinweise

database_size ist immer größer als die Summe aus reserved + unallocated space, da in diesem Wert die Größe von Protokolldateien berücksichtigt wird, während in reserved und unallocated_space nur Datenseiten berücksichtigt werden.

index_size enthält in beiden Resultsets die von XML-Indizes und Volltextindizes verwendeten Seiten. Wenn objname angegeben ist, werden die Seiten für die XML-Indizes und Volltextindizes für das Objekt auch in den Gesamtergebnissen für reserved und index_size mitgezählt.

Wenn Speicherplatz für eine Datenbank oder ein Objekt mit einem räumlichen Index kalkuliert wird, wird in den Spalten mit Größenangaben, z. B. database_size, reserved und index_size, die Größe des räumlichen Indexes berücksichtigt.

Wenn updateusage angegeben ist, scannt SQL Server Database Engine (Datenbankmodul) die Datenseiten in der Datenbank und nimmt an den Katalogsichten sys.allocation_units und sys.partitions alle erforderlichen Korrekturen bezüglich des von den Tabellen 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 bei großen Tabellen oder Datenbanken einige Zeit dauern. Verwenden Sie updateusage nur, wenn Sie vermuten, dass falsche Werte zurückgegeben werden und wenn der Vorgang keine negativen Auswirkungen auf andere Benutzer oder Prozesse in der Datenbank haben kann. 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 Database Engine (Datenbankmodul) 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 sp_spaceused unmittelbar nach dem Löschen oder Abschneiden eines großen Objekts zurückgegebenen Werte nicht unbedingt 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

Siehe auch

Verweis

CREATE INDEX (Transact-SQL)

CREATE TABLE (SQL Server)

DBCC UPDATEUSAGE (Transact-SQL)

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)

Konzepte

SQL Server Service Broker