Freigeben über


sp_estimate_data_compression_savings (Transact-SQL)

Gibt die aktuelle Größe des angeforderten Objekts zurück und schätzt die Objektgröß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. Die Objekte können mit der Zeilenkomprimierung oder der Seitenkomprimierung komprimiert werden. Wenn die Tabelle, der Index oder die Partition bereits komprimiert ist, können Sie mithilfe dieser Prozedur die Größe der erneut komprimierten Tabelle, des erneut komprimierten Index oder der erneut komprimierten Partition einschätzen.

HinweisHinweis

Die Komprimierung und sp_estimate_data_compression_savings sind nicht in jeder Edition von Microsoft SQL Server verfügbar. Eine Liste der Funktionen, die von den Editionen von SQL Server unterstützt werden, finden Sie unter Von den SQL Server 2012-Editionen unterstützte Funktionen.

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, der in tempdb erstellt wird. 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 Datenkomprimierung.

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 ist vom Datentyp 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 ist vom Datentyp sysname.

  • [ @index\_id= ] 'index_id'
    Die ID des Indexes. index_id ist vom Datentyp int. Die folgenden Werte sind möglich: die ID eines Indexes, NULL oder 0, 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 vom Datentyp int und kann einen der folgenden Werte annehmen: die Partitionsnummer eines Indexes 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'
    Der Typ 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 mit der aktuellen Komprimierungseinstellung. Dies beinhaltet jegliche 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 abzuschä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 eine Zeile beispielsweise 8000 Bytes lang ist und Sie die Größe um 40 Prozent verringern, passt weiterhin nur eine Zeile auf eine Datenseite. Daher werden keine Einsparungen 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 die Komprimierung für eine Tabelle aktiv ist, verwenden Sie sp_estimate_data_compression_savings, um die durchschnittliche Zeilengröße bei einer 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 geschätzt, wenn sie mit der ROW-Komprimierung komprimiert wird.

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

Siehe auch

Verweis

CREATE TABLE (Transact-SQL)

CREATE INDEX (Transact-SQL)

sys.partitions (Transact-SQL)

Gespeicherte Prozeduren für das Datenbankmodul (Transact-SQL)

Konzepte

Implementierung von Unicode-Komprimierung