Freigeben über


sp_estimate_data_compression_savings (Transact-SQL)

Gibt die aktuelle Größe von Tabellen zurück und schätzt die Tabellengröße für den angeforderten Komprimierungsstatus. Die Komprimierung kann für ganze Tabellen oder Teile von Tabellen ermittelt werden. Dazu gehören Heaps, gruppierte Indizes, nicht gruppierte Indizes, indizierte Sichten sowie Tabellen- und Indexpartitionen. Tabellenstrukturen können mit der Zeilenkomprimierung oder der Seitenkomprimierung komprimiert werden. Wenn die Tabelle, der Index oder die Partition bereits komprimiert ist, können Sie anhand dieser Prozedur die Größe der unkomprimierten Tabelle, des unkomprimierten Index oder der unkomprimierten Partition einschätzen.

HinweisHinweis

Komprimierung und sp_estimate_data_compression_savings sind nur in den SQL Server 2008 Enterprise und Developer Editions verfügbar.

Um die Größe des Objekts bei Verwendung der angeforderten Komprimierungseinstellung einzuschätzen, fragt diese gespeicherte Prozedur das Quellobjekt ab und lädt diese Daten in eine entsprechende Tabelle und einen entsprechenden Index in tempdb. Die Tabelle oder der Index, die bzw. der in tempdb erstellt wurde, wird anschließend entsprechend der angeforderten Einstellung komprimiert, und die Komprimierungseinsparungen werden berechnet.

Verwenden Sie die ALTER TABLE-Anweisung oder die ALTER INDEX-Anweisung, um den Komprimierungsstatus einer Tabelle, eines Index oder einer Partition zu ändern. Allgemeine Informationen über die Komprimierung finden Sie unter Erstellen komprimierter Tabellen und Indizes.

HinweisHinweis

Wenn die vorhandenen Daten fragmentiert sind, können Sie ihre Größe möglicherweise ohne Komprimierung verringern, indem Sie den Index neu erstellen. Für Indizes wird der Füllfaktor während der Neuerstellung des Indexes angewendet. Dadurch könnte die Größe des Indexes zunehmen.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

sp_estimate_data_compression_savings 
      [ @schema_name = ] 'schema_name'  
     , [ @object_name = ] 'object_name' 
    , [@index_id = ] index_id 
     , [@partition_number = ] partition_number 
    , [@data_compression = ] 'data_compression' 
[;]

Argumente

  • [ @schema\_name = ] 'schema_name'
    Der Name des Datenbankschemas, das die Tabelle oder die indizierte Sicht enthält. schema_name entspricht sysname. Wenn schema_name NULL ist, wird das Standardschema des aktuellen Benutzers verwendet.

  • [ @object\_name = ] 'object_name'
    Der Name der Tabelle oder der indizierten Sicht des Indexes. object_name entspricht sysname.

  • [ @index\_id = ] 'index_id'
    Die ID des Indexes. index_id ist int und kann einen der folgenden Werte annehmen: die ID-Nummer eines Index, NULL oder 0 (null), wenn object_id ein Heap ist. Geben Sie NULL an, wenn Informationen zu allen Indizes für eine Basistabelle oder Sicht zurückgegeben werden sollen. Wenn Sie NULL angeben, müssen Sie auch für partition_number NULL angeben.

  • [ @partition\_number = ] 'partition_number'
    Die Partitionsnummer im Objekt. partition_number ist int und kann einen der folgenden Werte annehmen: die Partitionsnummer eines Index oder Heaps, NULL oder 1 für einen nicht partitionierten Index oder Heap

    Zur Angabe der Partition können Sie auch die $partition-Funktion angeben. Geben Sie NULL an, wenn Informationen zu allen Partitionen des besitzenden Objekts zurückgegeben werden sollen.

  • [ @data\_compression = ] 'data_compression'
    Die Art der Komprimierung, die ausgewertet werden soll. data_compression kann einen der folgenden Werte annehmen: NONE, ROW oder PAGE.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Resultsets

Das folgende Resultset wird zurückgegeben, damit Informationen zur aktuellen und geschätzten Größe von Tabelle, Index oder Partition bereitgestellt werden.

Spaltenname

Datentyp

Beschreibung

object_name

sysname

Der Name der Tabelle oder indizierten Sicht.

schema_name

sysname

Das Schema der Tabelle oder indizierten Sicht.

index_id

int

Index-ID eines Index:

0 = Heap

1 = Gruppierter Index

> 1 = Nicht gruppierter Index

partition_number

int

Partitionsnummer. Gibt 1 für eine nicht partitionierte Tabelle oder einen Index zurück.

size_with_current_compression_setting (KB)

bigint

Die Größe der angeforderten, vorhandenen Tabelle, des Indexes oder der Partition.

size_with_requested_compression_setting (KB)

bigint

Die geschätzte Größe der Tabelle, des Indexes oder der Partition, die bzw. der die angeforderte Komprimierungseinstellung verwendet, und der vorhandene Füllfaktor (sofern zutreffend). Zudem wird vorausgesetzt, dass keine Fragmentierung vorliegt.

sample_size_with_current_compression_setting (KB)

bigint

Die Größe der Stichprobe, die mithilfe der vorhandenen Komprimierungseinstellung erstellt wird, mit vorhandenem Füllfaktor (sofern zutreffend) und ohne Fragmentierung. Da dieses Rowset von Grund auf neu erstellt wird, gibt es keine Fragmentierung.

sample_size_with_requested_compression_setting (KB)

bigint

Die Größe der Stichprobe, die mithilfe der angeforderten Komprimierungseinstellung erstellt wird, mit vorhandenem Füllfaktor (sofern zutreffend) und ohne Fragmentierung.

Hinweise

Verwenden Sie sp_estimate_data_compression_savings, um die Einsparungen beim Aktivieren einer Tabelle oder einer Partition für die Zeilen- oder Seitenkomprimierung einzuschätzen. Wenn beispielsweise die durchschnittliche Größe der Zeile um 40 Prozent verringert werden kann, können Sie die Größe des Objekts potenziell um 40 Prozent verringern. Möglicherweise erzielen Sie keine Platzeinsparung, weil dies vom Füllfaktor und von der Zeilengröße abhängt. Wenn es sich beispielsweise um eine Zeile handelt, die 8000 Bytes lang ist, und Sie die Größe um 40 Prozent verringern, passt weiterhin nur eine Zeile auf eine Datenseite. Es wird keine Einsparung erzielt.

Wenn die Ergebnisse der Ausführung von sp_estimate_data_compression_savings darauf hindeuten, dass sich die Tabelle vergrößert, bedeutet dies, dass für viele Zeilen in der Tabelle fast die gesamte Genauigkeit der Datentypen verwendet wird, und der geringe zusätzliche Verarbeitungsaufwand für das komprimierte Format ist größer als die Einsparungen durch die Komprimierung. Aktivieren Sie in diesem seltenen Fall die Komprimierung nicht.

Wenn eine Tabelle für eine Komprimierung aktiviert ist, verwenden Sie sp_estimate_data_compression_savings, um die durchschnittliche Größe der Zeile bei nicht komprimierter Tabelle einzuschätzen.

Eine (IS)-Sperre wird während dieses Vorgangs für die Tabelle abgerufen. Wenn keine (IS)-Sperre abgerufen werden kann, wird die Prozedur blockiert. Die Tabelle wird unter der Read Committed-Isolationsstufe gescannt.

Wenn die angeforderte Komprimierungseinstellung mit der aktuellen Komprimierungseinstellung identisch ist, gibt die gespeicherte Prozedur die geschätzte Größe ohne Fragmentierung und mit dem vorhandenen Füllfaktor zurück.

Wenn die Index- oder die Partitions-ID nicht vorhanden ist, werden keine Ergebnisse zurückgegeben.

Berechtigungen

Erfordert die SELECT-Berechtigung für die Tabelle.

Beispiele

Im folgenden Beispiel wird die Größe der Production.WorkOrderRouting-Tabelle in der AdventureWorks-Datenbank geschätzt, wenn sie mit der ROW-Komprimierung komprimiert wird.

USE AdventureWorks
GO
EXEC sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW' ;
GO