sp_estimate_data_compression_savings (Transact-SQL)sp_estimate_data_compression_savings (Transact-SQL)

GILT FÜR: jaSQL Server (ab 2008) neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Gibt die aktuelle Größe des angeforderten Objekts zurück und schätzt die Objektgröße für den angeforderten Komprimierungsstatus.Returns the current size of the requested object and estimates the object size for the requested compression state. Die Komprimierung kann für ganze Tabellen oder Teile von Tabellen ermittelt werden.Compression can be evaluated for whole tables or parts of tables. Dazu gehören Heaps, gruppierte Indizes, nicht gruppierte Indizes, columnstore-Indizes, indizierte Sichten, Tabelle und Indexpartitionen.This includes heaps, clustered indexes, nonclustered indexes, columnstore indexes, indexed views, and table and index partitions. Die Objekte können mithilfe der Zeile, Seite, columnstore- oder columnstore-archivkomprimierung komprimiert werden.The objects can be compressed by using row, page, columnstore or columnstore archive compression. 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.If the table, index, or partition is already compressed, you can use this procedure to estimate the size of the table, index, or partition if it is recompressed.

Hinweis

Komprimierung und Sp_estimate_data_compression_savings sind nicht verfügbar in jeder Edition von MicrosoftMicrosoft SQL ServerSQL Server.Compression and sp_estimate_data_compression_savings are not available in every edition of MicrosoftMicrosoftSQL ServerSQL Server. Eine Liste der Funktionen, die von den SQL ServerSQL Server-Editionen unterstützt werden, finden Sie unter Von den SQL Server 2016-Editionen unterstützte Funktionen.For a list of features that are supported by the editions of SQL ServerSQL Server, see Features Supported by the Editions of SQL Server 2016.

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.To estimate the size of the object if it were to use the requested compression setting, this stored procedure samples the source object and loads this data into an equivalent table and index created 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.The table or index create in tempdb is then compressed to the requested setting and the estimated compression savings is computed.

So ändern Sie den Komprimierungsstatus der eine Tabelle, Index oder Partition, die Verwendung der ALTER TABLE oder ALTER INDEX Anweisungen.To change the compression state of a table, index, or partition, use the ALTER TABLE or ALTER INDEX statements. Allgemeine Informationen zur Komprimierung finden Sie unter Datenkomprimierung.For general information about compression, see Data Compression.

Hinweis

Wenn die vorhandenen Daten fragmentiert sind, können Sie ihre Größe möglicherweise ohne Komprimierung verringern, indem Sie den Index neu erstellen.If the existing data is fragmented, you might be able to reduce its size without using compression by rebuilding the index. Für Indizes wird der Füllfaktor während der Neuerstellung des Indexes angewendet.For indexes, the fill factor will be applied during an index rebuild. Dadurch könnte die Größe des Indexes zunehmen.This could increase the size of the index.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

  
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'   
[;]  

ArgumenteArguments

[ @schema_name=] 'Schema_name"[ @schema_name= ] 'schema_name'
Der Name des Datenbankschemas, das die Tabelle oder die indizierte Sicht enthält.Is the name of the database schema that contains the table or indexed view. Schema_name ist Sysname.schema_name is sysname. Wenn Schema_name NULL ist, wird das Standardschema des aktuellen Benutzers verwendet.If schema_name is NULL, the default schema of the current user is used.

[ @object_name=] 'Object_name"[ @object_name= ] 'object_name'
Der Name der Tabelle oder der indizierten Sicht des Indexes.Is the name of the table or indexed view that the index is on. database_name ist vom Datentyp sysname.object_name is sysname.

[ @index_id=] 'Index_id"[ @index_id= ] 'index_id'
Die ID des Indexes.Is the ID of the index. Index_id ist Int, und kann einen der folgenden Werte: die ID eines Indexes, NULL oder 0, wenn Object_id ein Heap ist.index_id is int, and can be one of the following values: the ID number of an index, NULL, or 0 if object_id is a heap. Geben Sie NULL an, wenn Informationen zu allen Indizes für eine Basistabelle oder Sicht zurückgegeben werden sollen.To return information for all indexes for a base table or view, specify NULL. Wenn Sie NULL angeben, müssen Sie auch angeben, auf NULL für Partition_number.If you specify NULL, you must also specify NULL for partition_number.

[ @partition_number=] 'Partition_number"[ @partition_number= ] 'partition_number'
Die Partitionsnummer im Objekt.Is the partition number in the object. Partition_number ist Int, und kann einen der folgenden Werte: die Partitionsnummer eines Indexes oder Heaps, NULL oder 1 für einen nicht partitionierten Index oder Heap.partition_number is int, and can be one of the following values: the partition number of an index or heap, NULL or 1 for a nonpartitioned index or heap.

Sie können auch angeben, um die Partition anzugeben, die $partition Funktion.To specify the partition, you can also specify the $partition function. Geben Sie NULL an, wenn Informationen zu allen Partitionen des besitzenden Objekts zurückgegeben werden sollen.To return information for all partitions of the owning object, specify NULL.

[ @data_compression=] 'Data_compression"[ @data_compression= ] 'data_compression'
Der Typ der Komprimierung, die ausgewertet werden soll.Is the type of compression to be evaluated. DATA_COMPRESSION kann eine der folgenden Werte: KEINE, Zeile, Seite, COLUMNSTORE und COLUMNSTORE_ARCHIVE.data_compression can be one of the following values: NONE, ROW, PAGE, COLUMNSTORE, or COLUMNSTORE_ARCHIVE.

RückgabecodewerteReturn Code Values

0 (Erfolg) oder 1 (Fehler)0 (success) or 1 (failure)

ResultsetsResult Sets

Das folgende Resultset wird zurückgegeben, damit Informationen zur aktuellen und geschätzten Größe von Tabelle, Index oder Partition bereitgestellt werden.The following result set is returned to provide current and estimated size for the table, index, or partition.

SpaltennameColumn name DatentypData type DescriptionDescription
object_nameobject_name sysnamesysname Der Name der Tabelle oder indizierten Sicht.Name of the table or the indexed view.
schema_nameschema_name sysnamesysname Das Schema der Tabelle oder indizierten Sicht.Schema of the table or indexed view.
index_idindex_id intint Index-ID eines Index:Index ID of an index:

0 = Heap0 = Heap

1 = Gruppierter Index1 = Clustered index

> 1 = Nicht gruppierter Index> 1 = Nonclustered index
partition_numberpartition_number intint Partitionsnummer.Partition number. Gibt 1 für eine nicht partitionierte Tabelle oder einen Index zurück.Returns 1 for a nonpartitioned table or index.
size_with_current_compression_setting (KB)size_with_current_compression_setting (KB) bigintbigint Die Größe der angeforderten, vorhandenen Tabelle, des Indexes oder der Partition.Size of the requested table, index, or partition as it currently exists.
size_with_requested_compression_setting (KB)size_with_requested_compression_setting (KB) bigintbigint 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.Estimated size of the table, index, or partition that uses the requested compression setting; and, if applicable, the existing fill factor, and assuming there is no fragmentation.
sample_size_with_current_compression_setting (KB)sample_size_with_current_compression_setting (KB) bigintbigint Die Größe der Stichprobe mit der aktuellen Komprimierungseinstellung.Size of the sample with the current compression setting. Dies beinhaltet jegliche Fragmentierung.This includes any fragmentation.
sample_size_with_requested_compression_setting (KB)sample_size_with_requested_compression_setting (KB) bigintbigint Die Größe der Stichprobe, die mithilfe der angeforderten Komprimierungseinstellung erstellt wird, mit vorhandenem Füllfaktor (sofern zutreffend) und ohne Fragmentierung.Size of the sample that is created by using the requested compression setting; and, if applicable, the existing fill factor and no fragmentation.

HinweiseRemarks

Verwenden Sie Sp_estimate_data_compression_savings, um die einsparungen abschätzen, die auftreten können, wenn Sie eine Tabelle oder Partition für die Zeile, Seite, columnstore- oder columnstore-archivkomprimierung aktivieren.Use sp_estimate_data_compression_savings to estimate the savings that can occur when you enable a table or partition for row, page, columnstore or columnstore archive compression. 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.For instance if the average size of the row can be reduced by 40 percent, you can potentially reduce the size of the object by 40 percent. Möglicherweise erzielen Sie keine Platzeinsparung, weil dies vom Füllfaktor und von der Zeilengröße abhängt.You might not receive a space savings because this depends on the fill factor and the size of the row. 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.For example, if you have a row that is 8000 bytes long and you reduce its size by 40 percent, you can still fit only one row on a data page. Daher werden keine Einsparungen erzielt.There is no savings.

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.If the results of running sp_estimate_data_compression_savings indicate that the table will grow, this means that many rows in the table use almost the whole precision of the data types, and the addition of the small overhead needed for the compressed format is more than the savings from compression. Aktivieren Sie in diesem seltenen Fall die Komprimierung nicht.In this rare case, do not enable compression.

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.If a table is enabled for compression, use sp_estimate_data_compression_savings to estimate the average size of the row if the table is uncompressed.

Eine (IS)-Sperre wird während dieses Vorgangs für die Tabelle abgerufen.An (IS) lock is acquired on the table during this operation. Wenn keine (IS)-Sperre abgerufen werden kann, wird die Prozedur blockiert.If an (IS) lock cannot be obtained, the procedure will be blocked. Die Tabelle wird unter der Read Committed-Isolationsstufe gescannt.The table is scanned under the read committed isolation level.

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.If the requested compression setting is same as the current compression setting, the stored procedure will return the estimated size with no data fragmentation and using the existing fill factor.

Wenn die Index- oder die Partitions-ID nicht vorhanden ist, werden keine Ergebnisse zurückgegeben.If the index or partition ID does not exist, no results are returned.

BerechtigungenPermissions

Erfordert die SELECT-Berechtigung für die Tabelle.Requires SELECT permission on the table.

EinschränkungenLimitations and Restrictions

Vor SQL Server-2019 dieses Verfahren wurde nicht für columnstore-Indizes angewendet, und daher die datenkomprimierungsparameter COLUMNSTORE und COLUMNSTORE_ARCHIVE nicht akzeptiert hat.Prior to SQL Server 2019, this procedure did not apply to columnstore indexes, and therefore did not accept the data compression parameters COLUMNSTORE and COLUMNSTORE_ARCHIVE. Ab SQL Server-2019, können columnstore-Indizes ein Quellobjekt, für die Schätzung, sowohl als einen Typ für die angeforderte komprimierungseinstellung verwendet werden.Starting with SQL Server 2019, columnstore indexes can be used both as a source object for estimation, and as a requested compression type.

Überlegungen für columnstore-IndizesConsiderations for Columnstore Indexes

Beginnend mit SQL Server-2019, Sp_estimate_compression_savings unterstützt das Schätzen der sowohl für columnstore-als auch für columnstore-archivkomprimierung.Starting with SQL Server 2019, sp_estimate_compression_savings supports estimating both columnstore and columnstore archive compression. Im Gegensatz zu Seiten- und zeilenkomprimierung erfordert das Anwenden von columnstore-Komprimierung auf ein Objekt einen neuen columnstore-Index.Unlike page and row compression, applying columnstore compression to an object requires creating a new columnstore index. Aus diesem Grund bei Verwendung der Optionen COLUMNSTORE und COLUMNSTORE_ARCHIVE dieses Verfahrens bestimmt der Typ des Quellobjekts bereitgestellt, um die Prozedur den Typ des columnstore-Index für die komprimierte größenschätzung verwendet.For this reason, when using the COLUMNSTORE and COLUMNSTORE_ARCHIVE options of this procedure, the type of the source object provided to the procedure determines the type of columnstore index used for the compressed size estimate. Die folgende Tabelle zeigt den Verweis Objekten, die zum Schätzen der komprimierungseinsparungen für jedes Objekt verwendet werden. Geben Sie bei der @data_compression Parameter auf columnstore- oder die COLUMNSTORE_ARCHIVE festgelegt ist.The following table illustrates the reference objects used to estimate compression savings for each source object type when the @data_compression parameter is set to either COLUMNSTORE or COLUMNSTORE_ARCHIVE.

QuellobjektSource Object Verweis-ObjektReference Object
HeapHeap Gruppierter Columnstore-IndexClustered columnstore index
Gruppierter IndexClustered index Gruppierter Columnstore-IndexClustered columnstore index
Nicht gruppierter indexNon-clustered index Nicht gruppierte columnstore-Index (einschließlich der Schlüsselspalten und des angegebenen nicht gruppierten Indexes eingeschlossen Spalten sowie die Partitionsspalte der Tabelle, sofern vorhanden)Non-clustered columnstore index (including the key columns and any included columns of the provided non-clustered index, as well as the partition column of the table, if any)
Nicht gruppierter columnstore-IndexNon-clustered columnstore index Nicht gruppierte columnstore-Index (einschließlich die gleichen Spalten wie der angegebene nicht gruppierte columnstore-Index)Non-clustered columnstore index (including the same columns as the provided non-clustered columnstore index)
Gruppierter Columnstore-IndexClustered columnstore index Gruppierter Columnstore-IndexClustered columnstore index

Hinweis

Wenn der columnstore-Komprimierung von einem Rowstore-Quellobjekt (gruppierter Index, nicht gruppierten Index oder Heap) zu schätzen, wenn es werden alle Spalten im Quellobjekt, die einen Datentyp aufweisen, der nicht in einem columnstore-Index Sp_estimate_compression_ unterstützt wird Fehler bei der einsparungen.When estimating columnstore compression from a rowstore source object (clustered index, non-clustered index or heap), if there are any columns in the source object that have a data type that is not supported in a columnstore index, sp_estimate_compression_savings will fail with an error.

Auf ähnliche Weise, wenn die @data_compression Parameter ist auf NONE, ROW oder PAGE festgelegt und das Quellobjekt ein columnstore-Index, in der folgende Tabelle wird beschrieben, die Verweisobjekte verwendet.Similarly, when the @data_compression parameter is set to NONE, ROW, or PAGE and the source object is a columnstore index, the following table outlines the reference objects used.

QuellobjektSource Object Verweis-ObjektReference Object
Gruppierter Columnstore-IndexClustered columnstore index HeapHeap
Nicht gruppierter columnstore-IndexNon-clustered columnstore index Nicht gruppierte Index (einschließlich ggf. als eingeschlossene Spalte in den nicht gruppierten columnstore-Index als Schlüsselspalten und die Partitionsspalte der Tabelle enthaltenen Spalten)Non-clustered index (including the columns contained in the non-clustered columnstore index as key columns, and the partition column of the table, if any, as an included column)

Hinweis

Wenn von einem columnstore-Quellobjekt Rowstore-Komprimierung (NONE, Zeile oder Seite) zu schätzen, achten Sie darauf, dass der Quellindex nicht mehr als 32 Spalten enthält, wie dadurch das Limit in einen Rowstore-Index (nicht gruppiert) unterstützt wird.When estimating rowstore compression (NONE, ROW or PAGE) from a columnstore source object, be sure that the source index does not contain more than 32 columns as this is the limit supported in a rowstore (non-clustered) index.

BeispieleExamples

Im folgenden Beispiel wird die Größe der Production.WorkOrderRouting-Tabelle geschätzt, wenn sie mit der ROW-Komprimierung komprimiert wird.The following example estimates the size of the Production.WorkOrderRouting table if it is compressed by using ROW compression.

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

Siehe auchSee Also

CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
sys.partitions (Transact-SQL) sys.partitions (Transact-SQL)
Datenbank-Engine gespeicherten Prozeduren (Transact-SQL) Database Engine Stored Procedures (Transact-SQL)
Implementierung von Unicode-KomprimierungUnicode Compression Implementation