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.
Hinweis |
---|
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.
Hinweis |
---|
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. |
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 HeapZur 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 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 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 AdventureWorks2008R2-Datenbank geschätzt, wenn sie mit der ROW-Komprimierung komprimiert wird.
USE AdventureWorks2008R2;
GO
EXEC sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW' ;
GO