sp_estimate_data_compression_savings (Transact-SQL)

Anwendungsbereich: JaSQL Server (alle unterstützten Versionen)

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, Columnstore-Indizes, indizierte Sichten sowie Tabellen- und Indexpartitionen. Die Objekte können mithilfe der Zeilen-, Seiten-, Columnstore- oder Columnstore-Archivkomprimierung 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 nicht in jeder Edition von Microsoft SQL Server verfügbar. Eine Liste der Funktionen, die von den SQL Server-Editionen unterstützt werden, finden Sie unter Von den SQL Server 2016-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 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.

Um den Komprimierungsstatus einer Tabelle, eines Index oder einer Partition zu ändern, verwenden Sie die ALTER TABLE- oder ALTER INDEX-Anweisungen. Allgemeine Informationen zur Komprimierung finden Sie unter Datenkomprimierung.

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.

Symbol für Themenlink 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 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. database_name ist vom Datentyp sysname.

[ @index_id = ] index_id
Die ID des Indexes. index_id ist vom Wert int und kann einer der folgenden Werte sein: die ID-Nummer eines Indexes, NULL oder 0, wenn object_id 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 NULL für partition_number.

[ @partition_number = ] partition_number
Die Partitionsnummer im Objekt. partition_number ist vom Wert int und kann einer der folgenden Werte sein: die Partitionsnummer eines Indexes oder Heaps, NULL oder 1 für einen nicht partitionierten Index oder Heap.

Um die Partition anzugeben, können Sie auch die $partition 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 einer der folgenden Werte sein: NONE, ROW, PAGE, COLUMNSTORE oder COLUMNSTORE_ARCHIVE.

Rückgabecodewerte

„0“ (erfolgreich) oder „1“ (fehlerhaft)

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 , um die Einsparungen zu schätzen, die auftreten können, wenn Sie eine Tabelle oder Partition für die sp_estimate_data_compression_savings Zeilen-, Seiten-, Columnstore- oder Columnstore-Archivkomprimierung aktivieren. 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 Sie beispielsweise über eine Zeile verfügen, die 8.000 Byte lang ist, und Sie ihre Größe um 40 Prozent reduzieren, können Sie immer noch nur eine Zeile auf eine Datenseite passen. 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.

Einschränkungen

Vor SQL Server 2019 gilt dieses Verfahren nicht für Columnstore-Indizes und akzeptiert daher nicht die Datenkomprimierungsparameter COLUMNSTORE und COLUMNSTORE_ARCHIVE. Ab dem SQL Server 2019 können Columnstore-Indizes sowohl als Quellobjekt für die Schätzung als auch als angeforderter Komprimierungstyp verwendet werden.

Wichtig

Wenn speicheroptimierte TempDB-Metadaten in aktiviert sind, wird die Erstellung SQL Server 2019 (15.x) von Columnstore-Indizes für temporäre Tabellen nicht unterstützt. Aufgrund dieser Einschränkung wird sp_estimate_data_compression_savings columnstore- und COLUMNSTORE_ARCHIVE-Datenkomprimierungsparametern nicht unterstützt, wenn Memory-Optimized TempDB-Metadaten aktiviert ist.

Überlegungen zu Columnstore-Indizes

Ab unterstützt SQL Server 2019 (15.x) die Schätzung der Columnstore- und sp_estimate_compression_savings Columnstore-Archivkomprimierung. Im Gegensatz zur Seiten- und Zeilenkomprimierung muss beim Anwenden der Columnstore-Komprimierung auf ein Objekt ein neuer Columnstore-Index erstellt werden. Aus diesem Grund bestimmt bei Verwendung der Columnstore- und COLUMNSTORE_ARCHIVE-Optionen dieser Prozedur der Typ des Quellobjekts, das für die Prozedur bereitgestellt wird, den Typ des Columnstore-Indexes, der für die Schätzung der komprimierten Größe verwendet wird. Die folgende Tabelle veranschaulicht die Verweisobjekte, die verwendet werden, um Komprimierungseinsparungen für jeden Quellobjekttyp zu schätzen, wenn der Parameter auf COLUMNSTORE oder @data_compression COLUMNSTORE_ARCHIVE.

Quellobjekt Verweisobjekt
Heap Gruppierter Columnstore-Index
Gruppierter Index Gruppierter Columnstore-Index
Nicht gruppierter Index Nicht gruppierter Columnstore-Index (einschließlich der Schlüsselspalten und eingeschlossenen Spalten des bereitgestellten nicht gruppierten Indexes sowie der Partitionsspalte der Tabelle, falls vorhanden)
Nicht gruppierter Columnstore-Index Nicht gruppierter Columnstore-Index (einschließlich der gleichen Spalten wie der bereitgestellte nicht gruppierte Columnstore-Index)
Gruppierter Columnstore-Index Gruppierter Columnstore-Index

Hinweis

Wenn sie die Columnstore-Komprimierung aus einem Rowstore-Quellobjekt (gruppierter Index, nicht gruppierter Index oder Heap) abschätzen und Spalten im Quellobjekt mit einem Datentyp enthalten sind, der in einem Columnstore-Index nicht unterstützt wird, tritt bei sp_estimate_compression_savings ein Fehler auf.

Wenn der -Parameter auf , oder festgelegt ist und das Quellobjekt ein Columnstore-Index ist, werden in der folgenden Tabelle die verwendeten @data_compression NONE ROW PAGE Verweisobjekte beschrieben.

Quellobjekt Verweisobjekt
Gruppierter Columnstore-Index Heap
Nicht gruppierter Columnstore-Index Nicht gruppierter Index (einschließlich der Spalten, die im nicht gruppierten Columnstore-Index als Schlüsselspalten enthalten sind, und der Partitionsspalte der Tabelle (sofern verfügbar) als eingeschlossene Spalte)

Hinweis

Stellen Sie beim Schätzen der Rowstore-Komprimierung (NONE, ROW oder PAGE) aus einem Columnstore-Quellobjekt sicher, dass der Quellindex nicht mehr als 32 Spalten enthält, da dies der Grenzwert ist, der in einem Rowstore-Index (nicht gruppiert) unterstützt wird.

Beispiele

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

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

Weitere Informationen

CREATE TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL)
sys.partitions (Transact-SQL)
Datenbank-Engine Gespeicherte Prozeduren (Transact-SQL)
Implementierung von Unicode-Komprimierung