sp_estimate_data_compression_savings (Transact-SQL)

Restituisce le dimensioni correnti delle tabelle e stima le dimensioni delle tabelle per lo stato di compressione richiesto. La compressione può essere valutata per intere tabelle o parti di esse, inclusi heap, indici cluster, indici non cluster, viste indicizzate e partizioni di tabella e di indice. Le strutture delle tabelle possono essere compresse utilizzando la compressione di riga o di pagina. Se la tabella, la partizione o l'indice è già compresso, è possibile utilizzare questa procedura per stimare le dimensioni della tabella, della partizione o dell'indice se non fosse compresso.

[!NOTA]

La funzionalità di compressione e sp_estimate_data_compression_savings sono disponibili solo in SQL Server 2008 Enterprise Edition e Developer Edition.

Per stimare le dimensioni dell'oggetto in caso di applicazione dell'impostazione di compressione richiesta, questa stored procedure esegue il campionamento dell'oggetto di origine e carica i relativi dati in una tabella e in un indice equivalenti creati in tempdb. La tabella o l'indice creato in tempdb viene quindi compresso in base all'impostazione richiesta e viene calcolato il risparmio stimato in caso di utilizzo della compressione.

Per modificare lo stato della compressione di una tabella, un indice o una partizione, utilizzare l'istruzione ALTER TABLE o ALTER INDEX. Per informazioni generali sulla compressione, vedere Creazione di tabelle e di indici compressi.

[!NOTA]

Se i dati esistenti sono frammentati, potrebbe essere possibile ridurne le dimensioni senza utilizzare la compressione ricostruendo l'indice. Per gli indici, il fattore di riempimento viene applicato durante la ricostruzione. Questo potrebbe comportare un aumento delle dimensioni dell'indice.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • [ @schema\_name = ] 'schema_name'
    Nome dello schema del database che contiene la tabella o la vista indicizzata. schema_name è di tipo sysname. Se schema_name è NULL, viene utilizzato lo schema predefinito dell'utente corrente.

  • [ @object\_name = ] 'object_name'
    Nome della tabella o della vista indicizzata su cui è basato l'indice. object_name è di tipo sysname.

  • [ @index\_id = ] 'index_id'
    ID dell'indice. index_id è di tipo int e i possibili valori sono i seguenti: l'ID di un indice, NULL o 0 se object_id è un heap. Per restituire informazioni per tutti gli indici per una tabella di base o una vista, specificare NULL. Se si specifica NULL, è necessario specificare NULL anche per partition_number.

  • [ @partition\_number = ] 'partition_number'
    Numero di partizioni nell'oggetto. partition_number è di tipo int e i possibili valori sono i seguenti: il numero di partizioni per un indice o heap, NULL o 1 per un indice o un heap non partizionato.

    Per specificare la partizione, è possibile specificare anche la funzione $partition. Per restituire le informazioni per tutte le partizioni dell'oggetto, specificare NULL.

  • [ @data\_compression = ] 'data_compression'
    Tipo di compressione da valutare. I valori possibili di data_compression sono i seguenti: NONE, ROW o PAGE.

Valori dei codici restituiti

0 (esito positivo) o 1 (esito negativo)

Set di risultati

Per offrire informazioni sulle dimensioni correnti e stimate della tabella, dell'indice o della partizione, viene restituito il set di risultati seguente.

Nome colonna

Tipo di dati

Descrizione

object_name

sysname

Nome della tabella o della vista indicizzata.

schema_name

sysname

Schema della tabella o della vista indicizzata.

index_id

int

ID di un indice:

0 = heap

1 = indice cluster

> 1 = indice non cluster

partition_number

int

Numero di partizioni. Per una tabella o un indice non partizionato viene restituito 1.

size_with_current_compression_setting (KB)

bigint

Dimensioni attuali della tabella, della partizione o dell'indice richiesto.

size_with_requested_compression_setting (KB)

bigint

Dimensioni stimate della tabella, della partizione o dell'indice in caso di utilizzo dell'impostazione di compressione richiesta e, se applicabile, del fattore di riempimento esistente e presupponendo che non vi sia frammentazione.

sample_size_with_current_compression_setting (KB)

bigint

Dimensioni del campione creato utilizzando l'impostazione di compressione esistente e, se applicabile, il fattore di riempimento esistente e senza frammentazione. Poiché questo set di righe viene creato da zero, non vi è frammentazione.

sample_size_with_requested_compression_setting (KB)

bigint

Dimensioni del campione creato utilizzando l'impostazione di compressione richiesta e, se applicabile, il fattore di riempimento esistente e senza frammentazione.

Osservazioni

Utilizzare sp_estimate_data_compression_savings per stimare il risparmio che è possibile ottenere attivando la compressione di riga o di pagina per una tabella o una partizione. Se, ad esempio, le dimensioni medie della riga possono essere ridotte del 40%, è possibile ridurre del 40% le dimensioni dell'oggetto. Si potrebbe non ottenere un risparmio in termini di spazio a seconda del fattore di riempimento e delle dimensioni della riga. Se si riducono del 40% le dimensioni di una riga lunga 8000 byte, ad esempio, una pagina di dati può comunque contenere una sola riga e non si ottiene alcun risparmio.

Se i risultati dell'esecuzione di sp_estimate_data_compression_savings indicano un aumento delle dimensioni della tabella, significa che in molte righe della tabella viene utilizzata quasi la precisione completa dei tipi di dati e l'aggiunta del limitato overhead necessario per il formato compresso supera il risparmio che è possibile ottenere dalla compressione. In questi rari casi, non attivare la compressione.

Se per una tabella è attivata la compressione, utilizzare sp_estimate_data_compression_savings per stimare le dimensioni medie della riga nel caso in cui la tabella non fosse compressa.

Durante questa operazione viene acquisito un blocco (IS) nella tabella. Se non è possibile ottenere un blocco (IS), la procedura viene bloccata. La tabella viene analizzata con il livello di isolamento Read committed.

Se l'impostazione di compressione richiesta corrisponde all'impostazione di compressione corrente, la stored procedure restituirà le dimensioni stimate senza frammentazione dei dati e utilizzando il fattore di riempimento esistente.

Se l'ID della partizione o dell'indice non esiste, non viene restituito alcun risultato.

Autorizzazioni

È richiesta l'autorizzazione SELECT per la tabella.

Esempi

Nell'esempio seguente vengono stimate le dimensioni della tabella Production.WorkOrderRouting del database AdventureWorks in caso di utilizzo della compressione ROW.

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