DatenkomprimierungData Compression

GILT FÜR: jaSQL ServerjaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database unterstützen die Zeilen- und Seitenkomprimierung für rowstore-Tabellen und -Indizes sowie Columnstore und die Columnstore-Archivierungskomprimierung für Columnstore-Tabellen und -Indizes.and Azure SQL-DatenbankAzure SQL Database support row and page compression for rowstore tables and indexes, and supports columnstore and columnstore archival compression for columnstore tables and indexes.

Verwenden Sie für rowstore-Tabellen und -Indizes die Datenkomprimierungsfunktion, um die Größe der Datenbank zu reduzieren.For rowstore tables and indexes, use the data compression feature to help reduce the size of the database. Zusätzlich zum Sparen von Speicherplatz kann mithilfe der Datenkomprimierung auch die Leistung von E/A-intensiven Arbeitsauslastungen verbessert werden, da die Daten auf weniger Seiten gespeichert werden und Abfragen weniger Seiten vom Datenträger lesen müssen.In addition to saving space, data compression can help improve performance of I/O intensive workloads because the data is stored in fewer pages and queries need to read fewer pages from disk. Zusätzliche CPU-Ressourcen sind jedoch auf dem Datenbankserver erforderlich, um die Daten zu komprimieren und dekomprimieren, während Daten mit der Anwendung ausgetauscht werden.However, extra CPU resources are required on the database server to compress and decompress the data, while data is exchanged with the application. Sie können die Zeilen- und Seitenkomprimierung für die folgenden Datenbankobjekte konfigurieren:You can configure row and page compression on the following database objects:

  • Vollständige, als Heaps gespeicherte TabellenA whole table that is stored as a heap.
  • Vollständige, als gruppierte Indizes gespeicherte TabellenA whole table that is stored as a clustered index.
  • Vollständige nicht gruppierte IndizesA whole nonclustered index.
  • Vollständige indizierte SichtenA whole indexed view.
  • Bei partitionierten Tabellen und Indizes kann die Komprimierungsoption für jede Partition konfiguriert werden, wobei die verschiedenen Partitionen eines Objekts nicht die gleiche Komprimierungseinstellung aufweisen müssen.For partitioned tables and indexes, you can configure the compression option for each partition, and the various partitions of an object do not have to have the same compression setting.

Für columnstore-Tabellen und -Indizes wird immer die columnstore-Komprimierung verwendet, die nicht vom Benutzer konfiguriert werden kann.For columnstore tables and indexes, all columnstore tables and indexes always use columnstore compression and this is not user configurable. Die columnstore-Archivierungskomprimierung sollte zur weiteren Verringerung der Datengröße verwendet werden, wenn Sie zusätzliche Zeit und CPU-Ressourcen zum Speichern und Abrufen der Daten aufwenden können.Use columnstore archival compression to further reduce the data size for situations when you can afford extra time and CPU resources to store and retrieve the data. Die columnstore-Archivierungskomprimierung kann für die folgenden Datenbankobjekte konfiguriert werden:You can configure columnstore archival compression on the following database objects:

  • Vollständige columnstore-Tabelle oder vollständiger gruppierter columnstore-Index.A whole columnstore table or a whole clustered columnstore index. Da eine columnstore-Tabelle als gruppierter columnstore-Index gespeichert wird, haben beide Vorgehensweisen dieselben Ergebnisse.Since a columnstore table is stored as a clustered columnstore index, both approaches have the same results.
  • Vollständiger nicht gruppierter columnstore-Index.A whole nonclustered columnstore index.
  • Bei partitionierten columnstore-Tabellen und -Indizes kann die Option für die Archivierungskomprimierung für jede Partition konfiguriert werden, wobei die verschiedenen Partitionen nicht die gleiche Einstellung für die Archivierungskomprimierung aufweisen müssen.For partitioned columnstore tables and columnstore indexes, you can configure the archival compression option for each partition, and the various partitions do not have to have the same archival compression setting.

Hinweis

Daten können außerdem im Format des GZIP-Algorithmus komprimiert werden.Data can also be compressed using the GZIP algorithm format. Dies stellt einen zusätzlichen Schritt dar und ist insbesondere geeignet, um Teile der Daten für die Archivierung alter Daten für die Langzeitaufbewahrung zu komprimieren.This is an additional step and is most suitable for compressing portions of the data when archiving old data for long-term storage. Mithilfe der Funktion COMPRESS komprimierte Daten können nicht indiziert werden.Data compressed using the COMPRESS function cannot be indexed. Weitere Informationen finden Sie unter COMPRESS (Transact-SQL).For more information, see COMPRESS (Transact-SQL).

Überlegungen zur Verwendung von Zeilen- und SeitenkomprimierungConsiderations for When You Use Row and Page Compression

Beachten Sie die folgenden Punkte, wenn Sie die Zeilen- und Seitenkomprimierung verwenden:When you use row and page compression, be aware the following considerations:

  • Die Details der Datenkomprimierung können ohne vorherige Ankündigung in Service Packs oder nachfolgenden Versionen geändert werden.The details of data compression are subject to change without notice in service packs or subsequent releases.

  • Die Komprimierung ist verfügbar in Azure SQL-DatenbankAzure SQL DatabaseCompression is available in Azure SQL-DatenbankAzure SQL Database

  • Komprimierungsfunktionen sind nicht in jeder Edition von SQL ServerSQL Serververfügbar.Compression is not available in every edition of SQL ServerSQL Server. Weitere Informationen finden Sie unter Von den SQL Server 2016-Editionen unterstützte Funktionen.For more information, see Features Supported by the Editions of SQL Server 2016.

  • Für Systemtabellen ist die Komprimierung nicht verfügbar.Compression is not available for system tables.

  • Die Komprimierung kann ermöglichen, dass mehr Zeilen auf einer Seite gespeichert werden, die maximale Zeilengröße einer Tabelle bzw. eines Indexes kann dadurch allerdings nicht geändert werden.Compression can allow more rows to be stored on a page, but does not change the maximum row size of a table or index.

  • Eine Tabelle kann nicht komprimiert werden, wenn die maximale Zeilengröße einschließlich Verarbeitungsbytes die maximale Größe von 8060 Bytes überschreitet.A table cannot be enabled for compression when the maximum row size plus the compression overhead exceeds the maximum row size of 8060 bytes. Beispielsweise kann eine Tabelle mit den Spalten c1char(8000) und c2char(53) aufgrund der zusätzlichen Verarbeitungsbytes nicht komprimiert werden.For example, a table that has the columns c1char(8000) and c2char(53) cannot be compressed because of the additional compression overhead. Bei Verwendung des vardecimal-Speicherformats wird die Zeilengröße überprüft, wenn das Format aktiviert ist.When the vardecimal storage format is used, the row-size check is performed when the format is enabled. Bei der Zeilen- und Seitenkomprimierung wird die Überprüfung der Zeilengröße durchgeführt, wenn das Objekt zuerst komprimiert wird und die Überprüfung beim Einfügen bzw. Ändern der einzelnen Zeilen erfolgt.For row and page compression, the row-size check is performed when the object is initially compressed, and then checked as each row is inserted or modified. Bei der Komprimierung gelten die folgenden zwei Regeln:Compression enforces the following two rules:

    • Ein Update für einen Datentyp mit fester Länge muss immer erfolgreich sein.An update to a fixed-length type must always succeed.
    • Die Deaktivierung der Datenkomprimierung muss immer erfolgreich sein.Disabling data compression must always succeed. Selbst wenn die komprimierte Zeile auf die Seite passt, d. h. wenn ihre Größe weniger als 8060 Bytes beträgt, verhindert SQL ServerSQL Server Updates, die nicht in die unkomprimierte Zeile passen würden.Even if the compressed row fits on the page, which means that it is less than 8060 bytes; SQL ServerSQL Server prevents updates that would not fit on the row when it is uncompressed.
  • Bei Angabe einer Liste mit Partitionen kann der Komprimierungstyp für einzelne Partitionen auf ROW, PAGE oder NONE gesetzt werden.When a list of partitions is specified, the compression type can be set to ROW, PAGE, or NONE on individual partitions. Ohne Angabe einer Liste mit Partitionen wird für alle Partitionen die in der Anweisung angegebene Datenkomprimierungseigenschaft festgelegt.If the list of partitions is not specified, all partitions are set with the data compression property that is specified in the statement. Bei Erstellung einer Tabelle oder eines Indexes wird die Datenkomprimierung auf NONE festgelegt, falls nicht anders angegeben.When a table or index is created, data compression is set to NONE unless otherwise specified. Bei Änderung einer Tabelle wird die vorhandene Komprimierung beibehalten, falls nicht anders angegeben.When a table is modified, the existing compression is preserved unless otherwise specified.

  • Wenn Sie eine Partitionsliste bzw. eine Partition außerhalb des zulässigen Bereichs angeben, wird ein Fehler generiert.If you specify a list of partitions or a partition that is out of range, an error is generated.

  • Nicht gruppierte Indizes erben die Komprimierungseigenschaft der Tabelle nicht.Nonclustered indexes do not inherit the compression property of the table. In diesem Fall müssen Sie die Komprimierungseigenschaft explizit festlegen, um die Indizes zu komprimieren.To compress indexes, you must explicitly set the compression property of the indexes. Standardmäßig wird die Komprimierungseinstellung bei Erstellung eines Indexes auf NONE festgelegt.By default, the compression setting for indexes is set to NONE when the index is created.

  • Wenn ein gruppierter Index auf einem Heap erstellt wird, erbt der gruppierte Index den Komprimierungsstatus des Heaps, sofern kein anderer Komprimierungsstatus angegeben wird.When a clustered index is created on a heap, the clustered index inherits the compression state of the heap unless an alternative compression state is specified.

  • Wenn ein Heap zur Komprimierung auf Seitenebene konfiguriert wird, erfolgt die Komprimierung auf Seitenebene für die Seiten ausschließlich mit folgenden Methoden:When a heap is configured for page-level compression, pages receive page-level compression only in the following ways:

    • Der Massenimport von Daten findet mit aktivierten Massenoptimierungen statt.Data is bulk imported with bulk optimizations enabled.
    • Die Daten werden mit INSERT INTO ... eingefügt. WITH (TABLOCK)-Syntax, und die Tabelle weist keinen nicht gruppierten Index auf.Data is inserted using INSERT INTO ... WITH (TABLOCK) syntax and the table does not have a nonclustered index.
    • Eine Tabelle wird durch Ausführung von ALTER TABLE ... erneut erstellt. REBUILD-Anweisung mit der PAGE-Komprimierungsoption.A table is rebuilt by executing the ALTER TABLE ... REBUILD statement with the PAGE compression option.
  • Neue Seiten, die in einem Heap als Teil von DML-Vorgängen zugeordnet sind, verwenden die Seitenkomprimierung erst nach der Neuerstellung des Heaps.New pages allocated in a heap as part of DML operations do not use PAGE compression until the heap is rebuilt. Erstellen Sie den Heap neu, indem Sie die Komprimierung entfernen und neu anwenden oder indem Sie einen gruppierten Index erstellen und entfernen.Rebuild the heap by removing and reapplying compression, or by creating and removing a clustered index.

  • Zur Änderung der Komprimierungseinstellung für einen Heap müssen alle nicht gruppierten Indizes der Tabelle neu erstellt werden, sodass sie auf die neuen Zeilenpositionen im Heap zeigen.Changing the compression setting of a heap requires all nonclustered indexes on the table to be rebuilt so that they have pointers to the new row locations in the heap.

  • Sie können die ROW- bzw. die PAGE-Komprimierung online oder offline aktivieren und deaktivieren.You can enable or disable ROW or PAGE compression online or offline. Die Online-Aktivierung der Komprimierung für einen Heap erfolgt mit einem einzelnen Thread.Enabling compression on a heap is single threaded for an online operation.

  • Die Speicherplatzanforderungen zur Aktivierung bzw. Deaktivierung der Zeilen- oder Seitenkomprimierung entsprechen den Anforderungen zur Indexerstellung bzw. -neuerstellung.The disk space requirements for enabling or disabling row or page compression are the same as for creating or rebuilding an index. Für partitionierte Daten können Sie den erforderlichen Speicherplatz reduzieren, indem sie die Komprimierung für die Partitionen einzeln aktivieren bzw. deaktivieren.For partitioned data, you can reduce the space that is required by enabling or disabling compression for one partition at a time.

  • Um den Komprimierungsstatus der Partitionen in einer partitionierten Tabelle zu ermitteln, fragen Sie die data_compression-Spalte der sys.partitions-Katalogsicht ab.To determine the compression state of partitions in a partitioned table, query the data_compression column of the sys.partitions catalog view.

  • Bei der Indexkomprimierung können Seiten auf Blattebene sowohl mit der Zeilen- als auch mit der Seitenkomprimierung komprimiert werden.When you are compressing indexes, leaf-level pages can be compressed with both row and page compression. Für Seiten auf Nichtblattebene erfolgt keine Seitenkomprimierung.Non-leaf-level pages do not receive page compression.

  • Aufgrund ihrer Größe werden Datentypen mit umfangreichen Werten in einigen Fällen getrennt von den regulären Zeilendaten auf speziell dafür vorgesehenen Seiten gespeichert.Because of their size, large-value data types are sometimes stored separately from the normal row data on special purpose pages. Die Datenkomprimierung ist für getrennt gespeicherte Daten nicht verfügbar.Data compression is not available for the data that is stored separately.

  • Tabellen, die in SQL Server 2005 (9.x)SQL Server 2005 (9.x) das vardecimal-Speicherformat implementiert haben, behalten diese Einstellung bei Durchführung eines Upgrades bei.Tables that implemented the vardecimal storage format in SQL Server 2005 (9.x)SQL Server 2005 (9.x), retain that setting when upgraded. Sie können die Zeilenkomprimierung auf Tabellen mit dem vardecimal-Speicherformat anwenden.You can apply row compression to a table that has the vardecimal storage format. Da die Zeilenkomprimierung dem vardecimal-Speicherformat übergeordnet ist, besteht jedoch kein Grund, das vardecimal-Speicherformat beizubehalten.However, because row compression is a superset of the vardecimal storage format, there is no reason to retain the vardecimal storage format. Der Komprimierungsgrad für Dezimalwerte wird durch die Kombination von vardecimal-Speicherformat und Zeilenkomprimierung nicht erhöht.Decimal values gain no additional compression when you combine the vardecimal storage format with row compression. Sie können die Seitenkomprimierung auf Tabellen mit dem vardecimal-Speicherformat anwenden, erzielen damit jedoch nicht unbedingt einen höheren Komprimierungsgrad für die Spalten im vardecimal-Speicherformat.You can apply page compression to a table that has the vardecimal storage format; however, the vardecimal storage format columns probably will not achieve additional compression.

    Hinweis

    SQL Server 2017SQL Server 2017 unterstützt das vardecimal-Speicherformat. Da mit der Zeilenkomprimierung jedoch dasselbe Ergebnis erzielt wird, wurde das vardecimal-Speicherformat als veraltet markiert.supports the vardecimal storage format; however, because row-level compression achieves the same goals, the vardecimal storage format is deprecated. Dieses Feature befindet sich im Wartungsmodus und wird möglicherweise in einer künftigen Version von Microsoft SQL Server entfernt.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

Verwenden von Columnstore und der Columnstore-ArchivierungskomprimierungUsing Columnstore and Columnstore Archive Compression

Gilt für: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis zur aktuellen Version), Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2014 (12.x)SQL Server 2014 (12.x) through current version), Azure SQL-DatenbankAzure SQL Database.

GrundlagenBasics

Columnstore-Tabellen und -Indizes werden immer mit columnstore-Komprimierung gespeichert.Columnstore tables and indexes are always stored with columnstore compression. Sie können die Größe von columnstore-Daten weiter reduzieren, indem Sie eine zusätzliche Komprimierung, die so genannte Archivierungskomprimierung, konfigurieren.You can further reduce the size of columnstore data by configuring an additional compression called archival compression. Zur Archivierungskomprimierung führt SQL ServerSQL Server den Microsoft XPRESS-Komprimierungsalgorithmus für die Daten aus.To perform archival compression, SQL ServerSQL Server runs the Microsoft XPRESS compression algorithm on the data. Die Archivierungskomprimierung kann mithilfe der folgenden Datenkomprimierungstypen aktiviert bzw. deaktiviert werden:Add or remove archival compression by using the following data compression types:

  • Verwenden Sie die COLUMNSTORE_ARCHIVE -Datenkomprimierung, um columnstore-Daten mit der Archivierungskomprimierung zu komprimieren.Use COLUMNSTORE_ARCHIVE data compression to compress columnstore data with archival compression.
  • Verwenden Sie die COLUMNSTORE -Datenkomprimierung, um mit der Archivierungskomprimierung komprimierte Daten zu dekomprimieren.Use COLUMNSTORE data compression to decompress archival compression. Die resultierenden Daten werden weiterhin mit der Columnstore-Komprimierung komprimiert.The resulting data continue to be compressed with columnstore compression.

Um die Archivierungskomprimierung zu aktivieren, verwenden Sie ALTER TABLE (Transact-SQL) oder ALTER INDEX (Transact-SQL) mit der REBUILD-Option sowie DATA COMPRESSION = COLUMNSTORE_ARCHIVE.To add archival compression, use ALTER TABLE (Transact-SQL) or ALTER INDEX (Transact-SQL) with the REBUILD option and DATA COMPRESSION = COLUMNSTORE_ARCHIVE.

Beispiele:Examples:

ALTER TABLE ColumnstoreTable1   
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION =  COLUMNSTORE_ARCHIVE) ;  
  
ALTER TABLE ColumnstoreTable1   
REBUILD PARTITION = ALL WITH (DATA_COMPRESSION =  COLUMNSTORE_ARCHIVE) ;  
  
ALTER TABLE ColumnstoreTable1   
REBUILD PARTITION = ALL WITH (DATA_COMPRESSION =  COLUMNSTORE_ARCHIVE ON PARTITIONS (2,4)) ;  

Um die Archivierungskomprimierung zu deaktivieren und die Daten wieder mit der columnstodere-Komprimierung zu komprimieren, verwenden Sie ALTER TABLE (Transact-SQL) oder ALTER INDEX (Transact-SQL) mit der REBUILD-Option sowie DATA COMPRESSION = COLUMNSTORE.To remove archival compression and restore the data to columnstore compression, use ALTER TABLE (Transact-SQL) or ALTER INDEX (Transact-SQL) with the REBUILD option and DATA COMPRESSION = COLUMNSTORE.

Beispiele:Examples:

ALTER TABLE ColumnstoreTable1   
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION =  COLUMNSTORE) ;  
  
ALTER TABLE ColumnstoreTable1   
REBUILD PARTITION = ALL WITH (DATA_COMPRESSION =  COLUMNSTORE) ;  
  
ALTER TABLE ColumnstoreTable1   
REBUILD PARTITION = ALL WITH (DATA_COMPRESSION =  COLUMNSTORE ON PARTITIONS (2,4) ) ;  

Im folgenden Beispiel wird die Datenkomprimierung für einige Partitionen auf die columnstore-Komprimierung und für andere Partitionen auf die columnstore-Archivierungskomprimierung festgelegt.This next example sets the data compression to columnstore on some partitions, and to columnstore archival on other partitions.

ALTER TABLE ColumnstoreTable1   
REBUILD PARTITION = ALL WITH (  
    DATA_COMPRESSION =  COLUMNSTORE ON PARTITIONS (4,5),  
    DATA COMPRESSION = COLUMNSTORE_ARCHIVE ON PARTITIONS (1,2,3)  
) ;  

LeistungPerformance

Mit der Archivierungskomprimierung komprimierte Columnstore-Indizes werden langsamer ausgeführt als Columnstore-Indizes ohne Archivierungskomprimierung.Compressing columnstore indexes with archival compression, causes the index to perform slower than columnstore indexes that do not have the archival compression. Die Archivierungskomprimierung sollte nur verwendet werden, wenn zusätzliche Zeit und CPU-Ressourcen zum Komprimieren und Abrufen der Daten aufgewendet werden können.Use archival compression only when you can afford to use extra time and CPU resources to compress and retrieve the data.

Der Vorteil der Archivierungskomprimierung ist weniger Speicherplatz, was nützlich für Daten ist, auf die nicht häufig zugegriffen wird.The benefit of archival compression, is reduced storage, which is useful for data that is not accessed frequently. Beispiel: Wenn Sie für die monatlich anfallenden Daten jeweils eine Partition verwenden und sich Ihre Aktivitäten meist auf die letzten Monate beschränken, könnten Sie die Daten weiter zurückliegender Monate archivieren, um den Speicherbedarf zu reduzieren.For example, if you have a partition for each month of data, and most of your activity is for the most recent months, you could archive older months to reduce the storage requirements.

MetadatenMetadata

Die folgenden Systemsichten enthalten Informationen zur Datenkomprimierung für gruppierte Indizes:The following system views contain information about data compression for clustered indexes:

Die Prozedur sp_estimate_data_compression_savings (Transact-SQL) kann auch für Columnstore-Indizes gelten.The procedure sp_estimate_data_compression_savings (Transact-SQL) can also apply to columnstore indexes.

Auswirkungen der Komprimierung auf partitionierte Tabellen und IndizesHow Compression Affects Partitioned Tables and Indexes

Wenn Sie die Datenkomprimierung mit partitionierten Tabellen und Indizes verwenden, beachten Sie Folgendes:When you use data compression with partitioned tables and indexes, be aware of the following considerations:

  • Wenn Sie Partitionen mit der ALTER PARTITION-Anweisung teilen, erben die geteilten Partitionen das Datenkomprimierungsattribut der ursprünglichen Partition.When partitions are split by using the ALTER PARTITION statement, both partitions inherit the data compression attribute of the original partition.

  • Wenn Sie zwei Partitionen zusammenführen, erbt die zurückgegebene Partition das Datenkomprimierungsattribut der Zielpartition.When two partitions are merged, the resultant partition inherits the data compression attribute of the destination partition.

  • Zum Wechseln einer Partition muss die Datenkomprimierungseigenschaft der Partition mit der Komprimierungseigenschaft der Tabelle übereinstimmen.To switch a partition, the data compression property of the partition must match the compression property of the table.

  • Zur Änderung der Komprimierung einer partitionierten Tabelle bzw. eines Indexes stehen zwei Syntaxvariationen zur Verfügung.There are two syntax variations that you can use to modify the compression of a partitioned table or index:

    • Mit der folgenden Syntax wird nur die referenzierte Partition neu erstellt:The following syntax rebuilds only the referenced partition:
      ALTER TABLE <table_name>   
      REBUILD PARTITION = 1 WITH (DATA_COMPRESSION =  <option>)  
      
    • Mit der folgenden Syntax wird die gesamte Tabelle neu erstellt, wobei für nicht referenzierte Partitionen die vorhandene Komprimierungseinstellung verwendet wird:The following syntax rebuilds the whole table by using the existing compression setting for any partitions that are not referenced:
      ALTER TABLE <table_name>   
      REBUILD PARTITION = ALL   
      WITH (DATA_COMPRESSION = PAGE ON PARTITIONS(<range>),  
      ... )  
      

    Für partitionierte Indizes gilt bei Verwendung von ALTER INDEX dasselbe Prinzip.Partitioned indexes follow the same principle using ALTER INDEX.

  • Beim Löschen eines gruppierten Indexes behalten die entsprechenden Heappartitionen ihre Einstellung für die Datenkomprimierung bei, sofern nicht das Partitionierungsschema geändert wird.When a clustered index is dropped, the corresponding heap partitions retain their data compression setting unless the partitioning scheme is modified. Wenn das Partitionierungsschema geändert wird, werden alle Partitionen neu erstellt und erhalten einen unkomprimierten Status.If the partitioning scheme is changed, all partitions are rebuilt to an uncompressed state. Um einen gruppierten Index zu löschen und das Partitionierungsschema zu ändern, sind folgende Schritte erforderlich:To drop a clustered index and change the partitioning scheme requires the following steps:

    1. Löschen Sie den gruppierten Index.Drop the clustered index.
    2. Ändern Sie die Tabelle mit der Option ALTER TABLE ... REBUILD ... zur Angabe der Komprimierungsoption.Modify the table by using the ALTER TABLE ... REBUILD ... option that specifies the compression option.

    OFFLINE können Sie einen gruppierten Index sehr schnell löschen, da lediglich die oberen Ebenen des gruppierten Indexes entfernt werden.To drop a clustered index OFFLINE is a very fast operation, because only the upper levels of clustered indexes are removed. Wenn ein gruppierter Index ONLINE gelöscht wird, muss SQL ServerSQL Server den Heap zwei Mal neu erstellen, ein Mal für Schritt 1 und ein Mal für Schritt 2.When a clustered index is dropped ONLINE, SQL ServerSQL Server must rebuild the heap two times, once for step 1 and once for step 2.

Auswirkungen der Komprimierung auf die ReplikationHow Compression Affects Replication

Gilt für: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis zur aktuellen Version).Applies to: SQL ServerSQL Server ( SQL Server 2014 (12.x)SQL Server 2014 (12.x) through current version).
Beachten Sie die folgenden Überlegungen, wenn Sie die Datenkomprimierung mit der Replikation verwenden:When you are using data compression with replication, be aware of the following considerations:

  • Wenn der Momentaufnahme-Agent das Anfangsschemaskript generiert, gilt für die Tabelle und die Indizes des neuen Schemas dieselbe Komprimierungseinstellung.When the Snapshot Agent generates the initial schema script, the new schema uses the same compression settings for both the table and its indexes. Die Komprimierung kann nicht nur für die Tabelle aktiviert werden.Compression cannot be enabled on just the table and not the index.
  • Bei Transaktionsreplikationen wird durch die Artikelschemaoption festgelegt, für welche abhängigen Objekte und Eigenschaften ein Skript erstellt werden muss.For transactional replication the article schema option determines what dependent objects and properties have to be scripted. Weitere Informationen finden Sie unter sp_addarticle.For more information, see sp_addarticle.
    Der Verteilungs-Agent überprüft bei der Anwendung von Skripts Abonnenten mit früheren Versionen nicht.The Distribution Agent does not check for down-level Subscribers when it applies scripts. Wenn die Replikation der Komprimierung ausgewählt wird, kann die Tabelle auf Abonnenten mit früheren Versionen nicht erstellt werden.If the replication of compression is selected, creating the table on down-level Subscribers fails. Aktivieren Sie die Replikation der Komprimierung für heterogene Topologien nicht.In the case of a mixed topology, do not enable the replication of compression.
  • Bei Mergereplikationen überschreibt der Veröffentlichungskompatibilitätsgrad die Schemaoptionen und legt fest, für welche Schemaobjekte Skripts erstellt werden.For merge replication, publication compatibility level overrides the schema options and determines the schema objects that are scripted.
    Bei heterogenen Topologien empfiehlt es sich, den Veröffentlichungskompatibilitätsgrad auf die frühere Abonnentenversion festzulegen, falls die neuen Komprimierungsoptionen nicht unterstützt werden müssen.In the case of a mixed topology, if it is not required to support the new compression options, the publication compatibility level should be set to the down-level Subscriber version. Erforderlichenfalls können Sie Tabellen auf dem Abonnenten komprimieren, nachdem sie erstellt wurden.If it is required, compress tables on the Subscriber after they have been created.

Die folgende Tabelle enthält Replikationseinstellungen, mit denen die Komprimierung während der Replikation gesteuert wird.The following table shows replication settings that control compression during replication.

BenutzerabsichtUser intent Replizieren des Partitionsschemas für eine Tabelle bzw. einen IndexReplicate partition scheme for a table or index Replizieren der KomprimierungseinstellungenReplicate compression settings SkriptverhaltenScripting behavior
Zur Replikation des Partitionsschemas und zur Aktivierung der Komprimierung auf dem Abonnenten für die Partition.To replicate the partition scheme and enable compression on the Subscriber on the partition. WahrTrue WahrTrue Sowohl für das Partitionsschema als auch für die Komprimierungseinstellungen wird ein Skript erstellt.Scripts both the partition scheme and the compression settings.
Zur Replikation des Partitionsschemas ohne Komprimierung der Daten auf dem Abonnenten.To replicate the partition scheme but not compress the data on the Subscriber. WahrTrue FalseFalse Für das Partitionsschema wird ein Skript erstellt, für die Komprimierungseinstellungen der Partition jedoch nicht.Scripts out the partition scheme but not the compression settings for the partition.
Keine Replikation des Partitionsschemas und keine Komprimierung der Daten auf dem Abonnenten.To not replicate the partition scheme and not compress the data on the Subscriber. FalschFalse FalseFalse Weder für die Partition noch für die Komprimierungseinstellungen wird ein Skript erstellt.Does not script partition or compression settings.
Zur Komprimierung der Tabelle auf dem Abonnenten, wenn alle Partitionen auf dem Verleger komprimiert sind, ohne Replikation des Partitionsschemas.To compress the table on the Subscriber if all the partitions are compressed on the Publisher, but not replicate the partition scheme. FalseFalse WahrTrue Überprüft, ob alle Partitionen für die Komprimierung aktiviert wurden.Checks if all the partitions are enabled for compression.

Skriptausgabe der Komprimierung auf Tabellenebene.Scripts out compression at the table level.

Auswirkungen der Komprimierung auf andere SQL Server-KomponentenHow Compression Affects Other SQL Server Components

Gilt für: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis zur aktuellen Version).Applies to: SQL ServerSQL Server ( SQL Server 2014 (12.x)SQL Server 2014 (12.x) through current version).

Die Komprimierung erfolgt im der Speicher-Engine, und die Daten werden in den meisten anderen Komponenten von SQL ServerSQL Server im unkomprimierten Zustand dargestellt.Compression occurs in the storage engine and the data is presented to most of the other components of SQL ServerSQL Server in an uncompressed state. Hierdurch werden die Auswirkungen der Komprimierung auf die anderen Komponenten auf folgende Punkte beschränkt:This limits the effects of compression on the other components to the following:

  • Massenimport- und -exportvorgängeBulk import and export operations
    Exportierte Daten werden im unkomprimierten Zeilenformat ausgegeben. Dies gilt auch für systemeigene Datenformate.When data is exported, even in native format, the data is output in the uncompressed row format. Aus diesem Grund kann die exportierte Datendatei erheblich größer sein als die Quelldaten.This can cause the size of exported data file to be significantly larger than the source data.
    Beim Importieren von Daten werden die Daten in der Speicher-Engine in das komprimierte Zeilenformat konvertiert, falls die Komprimierung in der Zieltabelle aktiviert wurde.When data is imported, if the target table has been enabled for compression, the data is converted by the storage engine into compressed row format. Hierbei ist die CPU-Nutzung höher als beim Import von Daten in eine unkomprimierte Tabelle.This can cause increased CPU usage compared to when data is imported into an uncompressed table.
    Beim Massenimport von Daten in einen Heap mit Seitenkomprimierung versucht der Massenimportvorgang die Daten beim Einfügen mit der Seitenkomprimierung zu komprimieren.When data is bulk imported into a heap with page compression, the bulk import operation tries to compress the data with page compression when the data is inserted.
  • Die Komprimierung hat keine Auswirkungen auf Sicherungs- und Wiederherstellungsvorgänge.Compression does not affect backup and restore.
  • Die Komprimierung hat keine Auswirkungen auf den Protokollversand.Compression does not affect log shipping.
  • Die Datenkomprimierung ist nicht kompatibel mit Sparsespalten.Data compression is incompatible with sparse columns. Daher können Tabellen mit Sparsespalten weder komprimiert werden, noch können Sparsespalten einer komprimierten Tabelle hinzugefügt werden.Therefore, tables containing sparse columns cannot be compressed nor can sparse columns be added to a compressed table.
  • Die Aktivierung der Komprimierung kann bewirken, dass sich Abfragepläne ändern, da die Daten mit einer anderen Anzahl von Seiten und Zeilen pro Seite gespeichert werden.Enabling compression can cause query plans to change because the data is stored using a different number of pages and number of rows per page.

Weitere InformationenSee Also

Implementierung von Zeilenkomprimierung Row Compression Implementation
Implementierung von Seitenkomprimierung Page Compression Implementation
Implementierung von Unicode-Komprimierung Unicode Compression Implementation
CREATE PARTITION SCHEME (Transact-SQL) CREATE PARTITION SCHEME (Transact-SQL)
CREATE PARTITION FUNCTION (Transact-SQL) CREATE PARTITION FUNCTION (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
ALTER INDEX (Transact-SQL)ALTER INDEX (Transact-SQL)