Partager via


sp_estimate_data_compression_savings (Transact-SQL)

Retourne la taille actuelle de l'objet demandé et estime la taille de l'objet pour l'état de compression demandé. La compression peut être évaluée pour des tables entières ou des parties de tables. Cela inclut des segments de mémoire, des index cluster, des index non cluster, des vues indexées et des partitions de table et d'index. Les objets peuvent être compressés à l'aide de la compression de ligne ou de la compression de page. Si la table, l'index ou la partition sont déjà compressés, vous pouvez utiliser cette procédure pour estimer la taille de la table, de l'index ou de la partition s'ils sont décompressés.

[!REMARQUE]

La compression et sp_estimate_data_compression_savings ne sont pas disponibles dans toutes les éditions de Microsoft SQL Server. Pour obtenir une liste des fonctionnalités prises en charge par les éditions de SQL Server, consultez Fonctionnalités prises en charge par les éditions de SQL Server 2012.

Pour estimer la taille de l'objet s'il devait utiliser le paramètre de compression demandé, cette procédure stockée échantillonne l'objet source et charge ces données dans une table et un index équivalents, créés dans tempdb. La table ou l'index créés dans tempdb sont ensuite compressés au paramètre demandé et les gains de compression estimés sont calculés.

Pour modifier l'état de compression d'une table, d'un index ou d'une partition, utilisez les instructions ALTER TABLE ou ALTER INDEX. Pour obtenir des informations générales sur la compression, consultez Compression de données.

[!REMARQUE]

Si les données existantes sont fragmentées, vous pouvez être en mesure de réduire leur taille sans utiliser la compression en reconstruisant l'index. Pour les index, le facteur de remplissage sera appliqué pendant une reconstruction d'index. Cela pourrait augmenter la taille de l'index.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

  • [ @schema\_name= ] 'schema_name'
    Nom du schéma de base de données qui contient la table ou la vue indexée. schema_name est de type sysname. Si schema_name a la valeur NULL, le schéma par défaut de l'utilisateur actif est utilisé.

  • [ @object\_name= ] 'object_name'
    Nom du schéma de la table ou de la vue indexée sur laquelle se trouve l'index. object_name est de type sysname.

  • [ @index\_id= ] 'index_id'
    Identificateur de l'index. index_id est de type int et peut avoir l'une des valeurs suivantes : le numéro d'ID d'un index, NULL ou 0 si object_id est un segment. Pour retourner des informations sur tous les index d'une table de base ou d'une vue, spécifiez la valeur NULL. Si vous spécifiez la valeur NULL, vous devez également spécifier NULL pour partition_number.

  • [ @partition\_number= ] 'partition_number'
    Numéro de partition dans l'objet. partition_number est de type int et peut avoir l'une des valeurs suivantes : le numéro de partition d'un index ou d'un segment, NULL ou 1 pour un index ou un segment non partitionné.

    Pour spécifier la partition, vous pouvez également spécifier la fonction $partition. Pour retourner des informations pour toutes les partitions de l'objet propriétaire, spécifiez NULL.

  • [ @data\_compression= ] 'data_compression'
    Type de compression à évaluer. data_compression peut prendre l'une des valeurs suivantes : NONE, ROW ou PAGE.

Valeurs des codes de retour

0 (succès) ou 1 (échec)

Jeux de résultats

Le jeu de résultats suivant est retourné pour fournir la taille actuelle et estimée de la table, de l'index ou de la partition.

Nom de la colonne

Type de données

Description

object_name

sysname

Nom de la table ou de la vue indexée.

schema_name

sysname

Schéma de la table ou de la vue indexée.

index_id

int

ID d'index d'un index :

0 = Segment de mémoire

1 = Index cluster

> 1 = Index non cluster

partition_number

int

Numéro de partition. Retourne 1 pour une table ou un index non partitionnés.

size_with_current_compression_setting (KB)

bigint

Taille de la table, de l'index ou de la partition demandés tels qu'ils existent actuellement.

size_with_requested_compression_setting (KB)

bigint

Taille estimée de la table, de l'index ou de la partition qui utilise le paramètre de compression demandé et, le cas échéant, le facteur de remplissage existant, en supposant qu'il n'y a pas de fragmentation.

sample_size_with_current_compression_setting (KB)

bigint

Taille de l'exemple avec le paramètre de compression actuel. Cela inclut toute fragmentation éventuelle.

sample_size_with_requested_compression_setting (KB)

bigint

Taille de l'échantillon créé à l'aide du paramètre de compression demandé et, le cas échéant, du facteur de remplissage existant, sans fragmentation.

Notes

Utilisez sp_estimate_data_compression_savings pour estimer les gains potentiels lorsque vous activez une table ou une partition pour la compression de ligne ou de page. Par exemple, si la taille moyenne de la ligne peut être réduite de 40 %, vous pouvez réduire la taille de l'objet de 40 %. Vous n'économiserez peut-être pas d'espace car cela dépend du facteur de remplissage et de la taille de la ligne. Par exemple, si vous disposez d'une ligne d'une longueur de 8 000 octets et que vous réduisez sa taille de 40 %, vous ne pouvez toujours pas intégrer plus d'une ligne dans une page de données. Vous ne bénéficiez d'aucun gain.

Si les résultats de l'exécution de sp_estimate_data_compression_savings indiquent que la taille de la table augmentera, cela signifie que de nombreuses lignes de la table utilisent presque toute la précision des types de données, et que l'ajout de la faible surcharge requise pour le format compressé dépasse les gains dérivés de la compression. Dans ce cas très peu fréquent, n'activez pas la compression.

Si une table est activée pour la compression, utilisez sp_estimate_data_compression_savings pour estimer la taille moyenne de la ligne si la table est décompressée.

Un verrou (IS) est acquis sur la table pendant cette opération. Si un verrou (IS) ne peut pas être obtenu, la procédure sera bloquée. La table est analysée sous le niveau d'isolement de lecture validée.

Si le paramètre de compression demandé est identique au paramètre de compression actuel, la procédure stockée retournera la taille estimée sans fragmentation de données et en utilisant le facteur de remplissage existant.

Si l'ID d'index ou de partition n'existe pas, aucun résultat n'est retourné.

Autorisations

Nécessite l'autorisation SELECT sur la table.

Exemples

L'exemple ci-dessous estime la taille de la table Production.WorkOrderRouting si elle est compressée à l'aide de la compression ROW.

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

Voir aussi

Référence

CREATE TABLE (Transact-SQL)

CREATE INDEX (Transact-SQL)

sys.partitions (Transact-SQL)

Procédures stockées du moteur de base de données (Transact-SQL)

Concepts

Implémentation de la compression Unicode