Compressione dei datiData Compression

In questo argomento si applica a: SìSQL ServerSìDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Database SQL di AzureAzure SQL Database e SQL Server 2017SQL Server 2017 supportano la compressione delle righe e delle pagine per gli indici e le tabelle rowstore e la compressione dell'archivio columnstore e columnstore per le tabelle e gli indici columnstore. and Database SQL di AzureAzure SQL Database support row and page compression for rowstore tables and indexes, and supports columnstore and columnstore archival compression for columnstore tables and indexes.

Per le tabelle e gli indici rowstore, utilizzare la funzionalità di compressione dei dati per ridurre le dimensioni del database.For rowstore tables and indexes, use the data compression feature to help reduce the size of the database. Oltre a risparmiare spazio, la compressione dei dati migliora le prestazioni dei carichi di lavoro di I/O a utilizzo elevato di memoria perché i dati vengono archiviati in un numero inferiore di pagine e le query devono leggere un numero inferiore di pagine dal disco.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. Sono tuttavia necessarie risorse della CPU aggiuntive nel server di database per comprimere e decomprimere i dati, mentre i dati vengono scambiati con l'applicazione.However, extra CPU resources are required on the database server to compress and decompress the data, while data is exchanged with the application. È possibile configurare la compressione di righe e pagine sugli oggetti di database seguenti:You can configure row and page compression on the following database objects:

  • Un'intera tabella archiviata come heap.A whole table that is stored as a heap.
  • Un'intera tabella archiviata come indice cluster.A whole table that is stored as a clustered index.
  • Un intero indice non cluster.A whole nonclustered index.
  • Un'intera vista indicizzata.A whole indexed view.
  • Per gli indici e le tabelle partizionati, è possibile configurare l'opzione di compressione per ogni partizione. Non è inoltre necessario che per le varie partizioni di un oggetto sia configurata la stessa impostazione di compressione.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.

Per gli indici e le tabelle columnstore, tutti gli indici e le tabelle columnstore utilizzano sempre la compressione columnstore che non è configurabile dall'utente.For columnstore tables and indexes, all columnstore tables and indexes always use columnstore compression and this is not user configurable. Utilizzare la compressione dell'archivio columnstore per ridurre ulteriormente le dimensioni dei dati in situazioni in cui è possibile concedere altro tempo e altre risorse della CPU per archiviare e recuperare i dati.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. È possibile configurare la compressione dell'archivio columnstore sugli oggetti di database seguenti:You can configure columnstore archival compression on the following database objects:

  • Un'intera tabella columnstore o un intero indice columnstore cluster.A whole columnstore table or a whole clustered columnstore index. Poiché una tabella columnstore viene archiviata come indice columnstore cluster, entrambi gli approcci producono gli stessi risultati.Since a columnstore table is stored as a clustered columnstore index, both approaches have the same results.
  • Un intero indice columnstore non cluster.A whole nonclustered columnstore index.
  • Per gli indici columnstore e le tabelle columnstore partizionati, è possibile configurare l'opzione di compressione dell'archivio per ogni partizione. Non è inoltre necessario che per le varie partizioni sia configurata la stessa impostazione di compressione dell'archivio.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.

Nota

È anche possibile comprimere i dati usando il formato di algoritmo GZIP.Data can also be compressed using the GZIP algorithm format. Si tratta di un passaggio aggiuntivo ed è particolarmente adatto per comprimere porzioni di dati durante l'archiviazione di vecchi dati per l'archiviazione a lungo termine.This is an additional step and is most suitable for compressing portions of the data when archiving old data for long-term storage. I dati compressi usando la funzione COMPRESS non possono essere indicizzati.Data compressed using the COMPRESS function cannot be indexed. Per altre informazioni, vedere COMPRESS (Transact-SQL).For more information, see COMPRESS (Transact-SQL).

Considerazioni relative all'utilizzo della compressione di riga e di paginaConsiderations for When You Use Row and Page Compression

Quando si utilizza la compressione di riga e di pagina, tenere presente le considerazioni seguenti:When you use row and page compression, be aware the following considerations:

  • I dettagli relativi alla compressione dei dati sono soggetti a modifiche senza preavviso nei Service Pack o nelle versioni successive.The details of data compression are subject to change without notice in service packs or subsequent releases.
  • La compressione è disponibile in Database SQL di AzureAzure SQL DatabaseCompression is available in Database SQL di AzureAzure SQL Database
  • La compressione non è disponibile in ogni edizione di SQL ServerSQL Server.Compression is not available in every edition of SQL ServerSQL Server. Per altre informazioni, vedere Funzionalità supportate dalle edizioni di SQL Server 2016.For more information, see Features Supported by the Editions of SQL Server 2016.
  • La compressione non è disponibile per le tabelle di sistema.Compression is not available for system tables.
  • La compressione consente di archiviare più righe in una pagina, ma non di modificare le dimensioni massime delle righe di una tabella o di un indice.Compression can allow more rows to be stored on a page, but does not change the maximum row size of a table or index.
  • Una tabella non può essere abilitata per la compressione quando la somma delle dimensioni massime delle righe e dell'overhead relativo alla compressione supera le dimensioni massime di 8.060 byte delle righe.A table cannot be enabled for compression when the maximum row size plus the compression overhead exceeds the maximum row size of 8060 bytes. Una tabella in cui sono presenti le colonne c1char(8000) e c2char(53) , ad esempio, non può essere compressa a causa dell'overhead aggiuntivo relativo alla compressione.For example, a table that has the columns c1char(8000) and c2char(53) cannot be compressed because of the additional compression overhead. Se si utilizza il formato di archiviazione vardecimal, il controllo delle dimensioni delle righe viene eseguito al momento dell'abilitazione del formato stesso.When the vardecimal storage format is used, the row-size check is performed when the format is enabled. Per la compressione di riga e di pagina, il controllo delle dimensioni delle righe viene eseguito quando l'oggetto viene compresso inizialmente e successivamente in occasione dell'inserimento o della modifica di ogni riga.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. Quando viene utilizzata la compressione, vengono applicate le due regole seguenti:Compression enforces the following two rules:
    • Un aggiornamento a un tipo a lunghezza fissa deve sempre avere esito positivo.An update to a fixed-length type must always succeed.
    • La disabilitazione della compressione dei dati deve sempre avere esito positivo.Disabling data compression must always succeed. Anche se la riga compressa rientra nella pagina, ovvero se le dimensioni della riga sono minori di 8.060 byte, in SQL ServerSQL Server vengono impediti gli aggiornamenti che non sarebbe possibile includere nella riga non compressa.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.
  • Quando viene specificato un elenco di partizioni, il tipo di compressione può essere impostato su ROW, PAGE o NONE per ogni singola partizione.When a list of partitions is specified, the compression type can be set to ROW, PAGE, or NONE on individual partitions. Se l'elenco di partizioni non è specificato, tutte le partizioni vengono impostate in base alla proprietà di compressione dei dati specificata nell'istruzione.If the list of partitions is not specified, all partitions are set with the data compression property that is specified in the statement. Quando viene creato un indice o una tabella, la compressione dei dati viene impostata su NONE se non specificato diversamente.When a table or index is created, data compression is set to NONE unless otherwise specified. Quando una tabella viene modificata, viene mantenuta la compressione esistente se non specificato diversamente.When a table is modified, the existing compression is preserved unless otherwise specified.
  • Se si specifica un elenco di partizioni o una partizione non compresa nell'intervallo, viene generato un errore.If you specify a list of partitions or a partition that is out of range, an error is generated.
  • Gli indici non cluster non ereditano la proprietà di compressione della tabella.Nonclustered indexes do not inherit the compression property of the table. Per comprimere gli indici, è necessario impostarne in modo esplicito la proprietà di compressione.To compress indexes, you must explicitly set the compression property of the indexes. Per impostazione predefinita, al momento della creazione dell'indice la compressione è impostata su NONE.By default, the compression setting for indexes is set to NONE when the index is created.
  • Quando un indice cluster viene creato in un heap, tale indice eredita lo stato di compressione dell'heap, a meno che non venga specificato uno stato di compressione alternativo.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.
  • Quando un heap è configurato per la compressione a livello di pagina, le pagine vengono compresse solo nelle modalità seguenti:When a heap is configured for page-level compression, pages receive page-level compression only in the following ways:
    • Viene eseguita l'importazione bulk dei dati con l'ottimizzazione delle operazioni bulk abilitata.Data is bulk imported with bulk optimizations enabled.
    • I dati vengono inseriti utilizzando la sintassi INSERT INTO ... WITH (TABLOCK) e la tabella non contiene un indice non cluster.Data is inserted using INSERT INTO ... WITH (TABLOCK) syntax and the table does not have a nonclustered index.
    • Una tabella viene ricompilata eseguendo l'istruzione ALTER TABLE ... REBUILD con l'opzione di compressione PAGE.A table is rebuilt by executing the ALTER TABLE ... REBUILD statement with the PAGE compression option.
  • Le nuove pagine allocate in un heap nel corso di operazioni DML non usano la compressione PAGE finché l'heap non viene ricompilato.New pages allocated in a heap as part of DML operations do not use PAGE compression until the heap is rebuilt. Ricompilare l'heap rimuovendo e riapplicando la compressione oppure creando e rimuovendo un indice cluster.Rebuild the heap by removing and reapplying compression, or by creating and removing a clustered index.
  • Per modificare l'impostazione di compressione di un heap, è necessario ricompilare tutti gli indici non cluster della tabella in modo che dispongano di puntatori ai nuovi percorsi delle righe nell'heap.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.
  • È possibile abilitare o disabilitare l'impostazione di compressione ROW o PAGE online oppure offline.You can enable or disable ROW or PAGE compression online or offline. L'abilitazione della compressione in un heap è un'operazione a thread singolo se eseguita online.Enabling compression on a heap is single threaded for an online operation.
  • I requisiti di spazio su disco per l'abilitazione o la disabilitazione della compressione di riga o di pagina sono gli stessi necessari per la creazione o la ricompilazione di un indice.The disk space requirements for enabling or disabling row or page compression are the same as for creating or rebuilding an index. Per i dati partizionati, è possibile ridurre lo spazio richiesto abilitando o disabilitando la compressione per una partizione alla volta.For partitioned data, you can reduce the space that is required by enabling or disabling compression for one partition at a time.
  • Per determinare lo stato della compressione delle partizioni in una tabella partizionata, eseguire una query sulla colonna data_compression della vista del catalogo sys.partitions.To determine the compression state of partitions in a partitioned table, query the data_compression column of the sys.partitions catalog view.
  • Durante la compressione di indici, alle pagine a livello foglia è possibile applicare sia la compressione di riga che quella di pagina,When you are compressing indexes, leaf-level pages can be compressed with both row and page compression. mentre alle pagine a livello non foglia non è possibile applicare la compressione di pagina.Non–leaf-level pages do not receive page compression.
  • A causa della dimensione, i tipi di dati per valori di grandi dimensioni vengono a volte archiviati separatamente rispetto ai dati delle righe normali in pagine specifiche.Because of their size, large-value data types are sometimes stored separately from the normal row data on special purpose pages. La compressione dei dati non è disponibile per i dati archiviati separatamente.Data compression is not available for the data that is stored separately.
  • Le tabelle in cui era implementato il formato di archiviazione vardecimal in SQL Server 2005SQL Server 2005 mantengono questa impostazione anche dopo l'aggiornamento.Tables that implemented the vardecimal storage format in SQL Server 2005SQL Server 2005, retain that setting when upgraded. È possibile applicare la compressione di riga a una tabella che utilizza il formato di archiviazione vardecimal.You can apply row compression to a table that has the vardecimal storage format. Tuttavia, poiché la compressione di riga è un superset del formato di archiviazione vardecimal, non è necessario mantenere quest'ultimo.However, because row compression is a superset of the vardecimal storage format, there is no reason to retain the vardecimal storage format. Quando si utilizza il formato di archiviazione vardecimal con la compressione di riga, per i valori decimali non si ottiene alcun miglioramento in termini di compressione.Decimal values gain no additional compression when you combine the vardecimal storage format with row compression. Sebbene sia possibile inoltre applicare la compressione di pagina a una tabella per cui è implementato il formato di archiviazione vardecimal, per le colonne che utilizzano tale formato probabilmente non è possibile ottenere compressione aggiuntiva.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.

    Nota

    In SQL Server 2017SQL Server 2017 è supportato il formato di archiviazione vardecimal. Tuttavia, poiché la compressione a livello di riga consente di ottenere gli stessi risultati, tale formato viene deprecato. SQL Server 2017SQL Server 2017 supports the vardecimal storage format; however, because row-level compression achieves the same goals, the vardecimal storage format is deprecated. Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

Utilizzo della compressione dell'archivio Columnstore e della compressione ColumnstoreUsing Columnstore and Columnstore Archive Compression

Si applica a: SQL ServerSQL Server (da SQL Server 2014SQL Server 2014 alla versione corrente), Database SQL di AzureAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2014SQL Server 2014 through current version), Database SQL di AzureAzure SQL Database.

Nozioni fondamentaliBasics

Gli indici e le tabelle columnstore vengono sempre archiviati con la compressione columnstore.Columnstore tables and indexes are always stored with columnstore compression. È possibile ridurre ulteriormente le dimensioni dei dati columnstore configurando una compressione aggiuntiva denominata compressione dell'archivio.You can further reduce the size of columnstore data by configuring an additional compression called archival compression. Per eseguire la compressione dell'archivio, in SQL ServerSQL Server viene eseguito l'algoritmo di compressione Microsoft XPRESS sui dati.To perform archival compression, SQL ServerSQL Server runs the Microsoft XPRESS compression algorithm on the data. Aggiungere o rimuovere la compressione dell'archivio utilizzando i tipi di compressione dati seguenti:Add or remove archival compression by using the following data compression types:

  • Usare la compressione dati COLUMNSTORE_ARCHIVE per comprimere i dati columnstore con la compressione dell'archivio.Use COLUMNSTORE_ARCHIVE data compression to compress columnstore data with archival compression.
  • Utilizzare la compressione dati COLUMNSTORE per decomprimere la compressione dell'archivio.Use COLUMNSTORE data compression to decompress archival compression. I dati risultanti verranno compressi con la compressione columnstore.The resulting data continue to be compressed with columnstore compression.

Per aggiungere la compressione dell'archivio, usare ALTER TABLE (Transact-SQL) o ALTER INDEX (Transact-SQL) con l'opzione REBUILD e DATA COMPRESSION = COLUMNSTORE.To add archival compression, use ALTER TABLE (Transact-SQL) or ALTER INDEX (Transact-SQL) with the REBUILD option and DATA COMPRESSION = COLUMNSTORE.

Esempi: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)) ;  

Per rimuovere la compressione dell'archivio e ripristinare i dati nella compressione columnstoe, usare ALTER TABLE (Transact-SQL) o ALTER INDEX (Transact-SQL) con l'opzione REBUILD e 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.

Esempi: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) ) ;  

Nell'esempio seguente la compressione dei dati viene impostata su columnstore in alcune partizioni e su archivio columnstore in altre.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)  
) ;  

PrestazioniPerformance

La compressione degli indici columnstore con la compressione dell'archivio comporta un calo delle prestazioni dell'indice rispetto agli indici columnstore compressi con un altro tipo di compressione.Compressing columnstore indexes with archival compression, causes the index to perform slower than columnstore indexes that do not have the archival compression. Utilizzare la compressione dell'archivio solo quando è possibile concedere altro tempo e altre risorse della CPU per comprimere e recuperare i dati.Use archival compression only when you can afford to use extra time and CPU resources to compress and retrieve the data.

Il vantaggio della compressione dell'archivio è uno spazio di archiviazione ridotto, utile per i dati a cui non si accede di frequente.The benefit of archival compression, is reduced storage, which is useful for data that is not accessed frequently. Se ad esempio si dispone di una partizione per ogni mese di dati e la maggior parte dell'attività è relativa ai mesi più recenti, è possibile archiviare i mesi precedenti per ridurre i requisiti di archiviazione.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.

MetadatiMetadata

Nelle viste di sistema seguenti sono contenute informazioni sulla compressione dei dati per gli indici cluster:The following system views contain information about data compression for clustered indexes:

La procedura sp_estimate_data_compression_savings (Transact-SQL) non si applica agli indici columnstore.The procedure sp_estimate_data_compression_savings (Transact-SQL) does not apply to columnstore indexes.

Impatto della compressione su tabelle e indici partizionatiHow Compression Affects Partitioned Tables and Indexes

Quando si utilizza la compressione dei dati con tabelle e indici partizionati, tenere presente le considerazioni seguenti:When you use data compression with partitioned tables and indexes, be aware of the following considerations:

  • Quando le partizioni vengono suddivise utilizzando l'istruzione ALTER PARTITION, entrambe le partizioni ereditano l'attributo di compressione dei dati della partizione originale.When partitions are split by using the ALTER PARTITION statement, both partitions inherit the data compression attribute of the original partition.
  • Quando due partizioni vengono unite, la partizione risultante eredita l'attributo di compressione dei dati della partizione di destinazione.When two partitions are merged, the resultant partition inherits the data compression attribute of the destination partition.
  • Per cambiare una partizione, è necessario che la relativa proprietà di compressione dei dati corrisponda a quella della tabella.To switch a partition, the data compression property of the partition must match the compression property of the table.
  • Per modificare la compressione di una tabella o di un indice partizionato, è possibile utilizzare due sintassi diverse:There are two syntax variations that you can use to modify the compression of a partitioned table or index:

    • La sintassi seguente consente di ricompilare solo la partizione cui si fa riferimento:The following syntax rebuilds only the referenced partition:
      ALTER TABLE <table_name> REBUILD PARTITION = 1 WITH (DATA_COMPRESSION = <option>)
    • La sintassi seguente consente di ricompilare l'intera tabella utilizzando l'impostazione di compressione esistente per qualsiasi partizione cui non si fa riferimento: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>),  
      ... )  
      

      Per gli indici partizionati viene seguito lo stesso principio utilizzando l'istruzione ALTER INDEX.Partitioned indexes follow the same principle using ALTER INDEX.

  • Quando un indice cluster viene eliminato, le partizioni di heap corrispondenti mantengono l'impostazione di compressione dei dati, a meno che lo schema di partizione non venga modificato.When a clustered index is dropped, the corresponding heap partitions retain their data compression setting unless the partitioning scheme is modified. Se lo schema di partizionamento viene modificato, tutte le partizioni vengono ricompilate in un stato non compresso.If the partitioning scheme is changed, all partitions are rebuilt to an uncompressed state. Per eliminare un indice cluster e modificare lo schema di partizionamento, è necessario effettuare le operazioni descritte nei passaggi seguenti:To drop a clustered index and change the partitioning scheme requires the following steps:

    1. Eliminare l'indice cluster.Drop the clustered index.
    2. Modificare la tabella utilizzando l'opzione ALTER TABLE ... REBUILD ... che specifica l'opzione di compressione.Modify the table by using the ALTER TABLE ... REBUILD ... option that specifies the compression option.

      L'eliminazione OFFLINE di un indice cluster è un'operazione di rapida esecuzione, poiché vengono rimossi solo i livelli superiori degli indici cluster.To drop a clustered index OFFLINE is a very fast operation, because only the upper levels of clustered indexes are removed. Quando un indice cluster viene eliminato ONLINE, in SQL ServerSQL Server è necessario ricompilare l'heap due volte, una volta per l'operazione descritta nel passaggio 1 e una volta per quella descritta nel passaggio 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.

Impatto della compressione sulla replicaHow Compression Affects Replication

Si applica a: SQL ServerSQL Server (da SQL Server 2014SQL Server 2014 alla versione corrente).Applies to: SQL ServerSQL Server ( SQL Server 2014SQL Server 2014 through current version).
Quando si utilizza la compressione dei dati con la replica, tenere presente le considerazioni seguenti:When you are using data compression with replication, be aware of the following considerations:

  • Quando l'agente snapshot genera lo script dello schema iniziale, il nuovo schema usa le stesse impostazioni di compressione sia per la tabella che per i relativi indici.When the Snapshot Agent generates the initial schema script, the new schema uses the same compression settings for both the table and its indexes. Non è possibile abilitare la compressione solo sulla tabella e non sull'indice.Compression cannot be enabled on just the table and not the index.
  • Per la replica transazionale, l'opzione dello schema dell'articolo determina gli oggetti e le proprietà dipendenti da inserire nello script.For transactional replication the article schema option determines what dependent objects and properties have to be scripted. Per altre informazioni, vedere sp_addarticle.For more information, see sp_addarticle.
    Quando applica gli script, l'agente di distribuzione non verifica la presenza di Sottoscrittori legacy.The Distribution Agent does not check for down-level Subscribers when it applies scripts. Se la replica della compressione è selezionata, la creazione della tabella in Sottoscrittori legacy non riesce.If the replication of compression is selected, creating the table on down-level Subscribers fails. Nel caso di una topologia mista, non abilitare la replica della compressione.In the case of a mixed topology, do not enable the replication of compression.
  • Per la replica di tipo merge, il livello di compatibilità della pubblicazione prevale sulle opzioni dello schema e determina gli oggetti dello schema per i quali viene generato uno script.For merge replication, publication compatibility level overrides the schema options and determines the schema objects that are scripted.
    Nel caso di una topologia mista, se non è necessario per supportare le nuove opzioni di compressione, il livello di compatibilità della pubblicazione deve essere impostato sulla versione del Sottoscrittore legacy.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. Se necessario, comprimere le tabelle nel Sottoscrittore dopo che sono state create.If it is required, compress tables on the Subscriber after they have been created.

Nella tabella seguente vengono illustrate le impostazioni di replica che controllano la compressione durante la replica stessa.The following table shows replication settings that control compression during replication.

Operazione che l'utente intende eseguireUser intent Replica dello schema di partizione per una tabella o un indiceReplicate partition scheme for a table or index Replica delle impostazioni di compressioneReplicate compression settings Comportamento a livello di scriptScripting behavior
Replicare lo schema di partizione e abilitare la compressione sulla partizione nel Sottoscrittore.To replicate the partition scheme and enable compression on the Subscriber on the partition. TrueTrue TrueTrue Inserisce nello script lo schema di partizione e le impostazioni di compressione.Scripts both the partition scheme and the compression settings.
Replicare lo schema di partizione senza comprimere i dati nel Sottoscrittore.To replicate the partition scheme but not compress the data on the Subscriber. TrueTrue FalseFalse Inserimento nello script dello schema di partizione, ma non delle impostazioni di connessione per la partizione.Scripts out the partition scheme but not the compression settings for the partition.
Non replicare lo schema di partizione né comprimere i dati nel Sottoscrittore.To not replicate the partition scheme and not compress the data on the Subscriber. FalseFalse FalseFalse Non inserisce nello script né la partizione né le impostazioni di compressione.Does not script partition or compression settings.
Comprimere la tabella nel Sottoscrittore se tutte le partizioni sono compresse nel server di pubblicazione, senza replicare lo schema di partizione.To compress the table on the Subscriber if all the partitions are compressed on the Publisher, but not replicate the partition scheme. FalseFalse TrueTrue Controlla se tutte le partizioni sono abilitate per la compressione.Checks if all the partitions are enabled for compression.

Inserisce nello script la compressione a livello di tabella.Scripts out compression at the table level.

Impatto della compressione su altri componenti di SQL ServerHow Compression Affects Other SQL Server Components

Si applica a: SQL ServerSQL Server (da SQL Server 2014SQL Server 2014 alla versione corrente).Applies to: SQL ServerSQL Server ( SQL Server 2014SQL Server 2014 through current version).

La compressione viene eseguita nel motore di archiviazione e i dati vengono presentati alla maggior parte degli altri componenti di SQL ServerSQL Server in uno stato non compresso,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. limitando gli effetti della compressione negli altri componenti in relazione agli aspetti seguenti:This limits the effects of compression on the other components to the following:

  • Operazioni di importazione ed esportazione bulkBulk import and export operations
    Quando i dati vengono esportati, anche in formato nativo, il relativo output è in formato di riga non compresso.When data is exported, even in native format, the data is output in the uncompressed row format. In questo modo le dimensioni del file di dati esportato potrebbero risultare molto più elevate rispetto ai dati di origine.This can cause the size of exported data file to be significantly larger than the source data.
    Quando i dati vengono importati, se la tabella di destinazione è stata abilitata per la compressione i dati vengono convertiti dal motore di archiviazione in formato di riga compresso.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. In questo modo l'utilizzo della CPU potrebbe aumentare rispetto a una situazione in cui i dati vengono importati in una tabella non compressa.This can cause increased CPU usage compared to when data is imported into an uncompressed table.
    Quando i dati vengono importati in blocco in un heap con compressione di pagina, al momento dell'inserimento dei dati l'operazione di importazione in blocco tenta di comprimerli mediante la compressione di pagina.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.
  • La compressione non influisce sulle operazioni di backup e ripristino.Compression does not affect backup and restore.
  • La compressione non influisce sul log shipping.Compression does not affect log shipping.
  • La compressione dei dati è incompatibile con le colonne di tipo sparse.Data compression is incompatible with sparse columns. Non è pertanto possibile comprimere le tavole contenenti colonne di tipo sparse, né aggiungere le colonne di questo tipo a una tabella compressa.Therefore, tables containing sparse columns cannot be compressed nor can sparse columns be added to a compressed table.
  • L'abilitazione della compressione può provocare la modifica dei piani di query, in quanto i dati vengono archiviati tramite un numero diverso di pagine e un numero diverso di righe per pagina.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.

Vedere ancheSee Also

Implementazione della compressione di riga Row Compression Implementation
Implementazione della compressione di pagina Page Compression Implementation
Implementazione della compressione Unicode 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)