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

GILT FÜR: jaSQL Server neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server 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 zählen Heaps, gruppierte Indizes, nicht gruppierte Indizes, columnstore--Indizes, indizierte Sichten und Tabellen-und Index Partitionen.This includes heaps, clustered indexes, nonclustered indexes, columnstore indexes, indexed views, and table and index partitions. Die Objekte können mithilfe von Zeilen-, Seiten-, columnstore--oder columnstore--Archiv Komprimierung 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 in jeder Edition von MicrosoftMicrosoft SQL ServerSQL Serververfügbar.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.

Verwenden Sie die ALTER TABLE -Anweisung oder die Alter Index -Anweisung, um den Komprimierungs Status einer Tabelle, eines Indexes oder einer Partition zu ändern.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 vom Datentyp vom Datentyp 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 vom Datentyp intund kann einen der folgenden Werte aufweisen: die ID-Nummer 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 für partition_numberauch NULL angeben.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 vom Datentyp intund kann einen der folgenden Werte aufweisen: 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.

Um die Partition anzugeben, können Sie auch die $Partition -Funktion angeben.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 einen der folgenden Werte aufweisen: None, Row, Page, columnstore oder 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 BeschreibungDescription
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 zu schätzen, die beim Aktivieren einer Tabelle oder einer Partition für die Zeilen-, Seiten-, columnstore--oder columnstore--Archiv Komprimierung auftreten können.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 wurde dieses Verfahren nicht für columnstore--Indizes angewendet und akzeptierte daher nicht die Daten Komprimierungs Parameter columnstore-und COLUMNSTORE_ARCHIVE.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 als Quell Objekt zur Schätzung und als angeforderter Komprimierungstyp 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 zu columnstore-IndizesConsiderations for Columnstore Indexes

Ab SQL Server 2019 unterstützt sp_estimate_compression_savings das Schätzen der columnstore--und columnstore--Archiv Komprimierung.Starting with SQL Server 2019, sp_estimate_compression_savings supports estimating both columnstore and columnstore archive compression. Anders als bei der Seiten-und Zeilen Komprimierung muss beim Anwenden der columnstore--Komprimierung auf ein Objekt ein neuer columnstore--Index erstellt werdenUnlike page and row compression, applying columnstore compression to an object requires creating a new columnstore index. Aus diesem Grund wird bei Verwendung der columnstore--und COLUMNSTORE_ARCHIVE-Optionen dieser Prozedur der Typ des für die Prozedur bereitgestellten Quell Objekts bestimmt den Typ des columnstore--Indexes, der für die geschätzte Größen Schätzung verwendet wird.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. In der folgenden Tabelle werden die Verweis Objekte veranschaulicht, die zur Schätzung der Komprimierungs Einsparungen für jeden @data_compression Quell Objekttyp verwendet werden, wenn der Parameter auf columnstore oder 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.

Quell ObjektSource Object Verweis ObjektReference Object
HeapHeap Gruppierter Columnstore-IndexClustered columnstore index
Gruppierter IndexClustered index Gruppierter Columnstore-IndexClustered columnstore index
Nicht gruppierter IndexNonclustered index Nicht gruppierter columnstore--Index (einschließlich der Schlüssel Spalten und aller enthaltenen Spalten des bereitgestellten nicht gruppierten Indexes sowie der partitions Spalte der Tabelle, sofern vorhanden)Nonclustered columnstore index (including the key columns and any included columns of the provided nonclustered index, as well as the partition column of the table, if any)
Nicht gruppierter Columnstore-IndexNonclustered columnstore index Nicht gruppierter columnstore--Index (einschließlich der gleichen Spalten wie der angegebene nicht gruppierte columnstore--Index)Nonclustered columnstore index (including the same columns as the provided nonclustered columnstore index)
Gruppierter Columnstore-IndexClustered columnstore index Gruppierter Columnstore-IndexClustered columnstore index

Hinweis

Beim Schätzen der columnstore--Komprimierung aus einem rowstore-Quell Objekt (gruppierter Index, nicht gruppierter Index oder Heap), wenn Spalten im Quell Objekt vorhanden sind, die einen Datentyp aufweisen, der in einem columnstore--Index nicht unterstützt wird, sp_estimate_compression_savings schlägt mit einem Fehler fehl.When estimating columnstore compression from a rowstore source object (clustered index, nonclustered 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.

Wenn der @data_compression -Parameter auf None, Row oder Page festgelegt ist und das Quell Objekt ein columnstore--Index ist, werden in der folgenden Tabelle die verwendeten Verweis Objekte beschrieben.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.

Quell ObjektSource Object Verweis ObjektReference Object
Gruppierter Columnstore-IndexClustered columnstore index HeapHeap
Nicht gruppierter Columnstore-IndexNonclustered columnstore index Nicht gruppierter Index (einschließlich der Spalten, die im nicht gruppierten columnstore--Index als Schlüssel Spalten enthalten sind, und die Partitions Spalte der Tabelle, sofern vorhanden, als enthaltene Spalte)Nonclustered index (including the columns contained in the nonclustered columnstore index as key columns, and the partition column of the table, if any, as an included column)

Hinweis

Wenn Sie die rowstore-Komprimierung (None, Row oder Page) aus einem columnstore--Quell Objekt schätzen, stellen Sie sicher, dass der Quell Index nicht mehr als 32 Spalten enthält, da dies der Grenzwert ist, der in einem rowstore-Index (Nonclustered) 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 (nonclustered) 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 gespeicherter (Prozeduren (Transact-SQL)) Database Engine Stored Procedures (Transact-SQL)
Implementierung von Unicode-KomprimierungUnicode Compression Implementation