Dans votre base de données SQL Server, vous pouvez avoir de grandes tables qui utilisent des types de données décimales. Cependant, vous pourriez soupçonner qu’une grande quantité d’espace est gaspillée car les valeurs stockées dans ces colonnes n’utilisent pas la précision autorisée. Dans cet article, nous explorerons une solution pour récupérer cet espace dans votre base de données SQL Server.
Utilisation du type de données Vardecimal
À partir de SQL Server 2005, les éditions Enterprise et Developer de SQL Server ont introduit le type de données vardecimal. En utilisant ce type de données, vous pouvez économiser de l’espace global dans votre base de données.
Notes importantes sur le type de données Vardecimal SQL Server
Il est important de noter que seules les éditions Enterprise ou Developer de SQL Server prennent en charge le type de données vardecimal. De plus, la conversion en vardecimal est une opération hors ligne, ce qui signifie qu’elle doit être effectuée lorsque la table est hors ligne pendant toute la durée du processus.
Il est recommandé d’activer le stockage vardecimal uniquement si la quantité d’espace de stockage économisée est considérablement importante. L’activation du stockage vardecimal sur une table permet au moteur de traiter les valeurs décimales comme des chaînes de longueur variable, similaires aux chaînes de longueur variable. Bien que cela puisse entraîner une augmentation du temps CPU, cela peut réduire considérablement l’espace de stockage.
Activation de Vardecimal sur une table
Parcourons le processus d’activation de vardecimal pour une base de données et une table.
Étape 1 : Activer le stockage Vardecimal au niveau de la base de données
Pour activer le stockage vardecimal pour la base de données de votre application, exécutez la commande suivante :
EXEC sp_db_vardecimal_storage_format 'VotreBaseDeDonnées', 'ON'
GO
Étape 2 : Estimer les économies d’espace pour une table
Estimez le nombre d’octets qui seront économisés pour une table donnée en appelant la procédure stockée système sp_estimated_rowsize_reduction_for_vardecimal. Cette procédure détermine les longueurs moyennes des lignes avant et après l’activation du stockage vardecimal.
EXEC sys.sp_estimated_rowsize_reduction_for_vardecimal 'VotreTable'
GO
Cela vous fournira trois résultats : avg_rowlen_fixed_format, avg_rowlen_vardecimal_format et row_count.
Étape 3 : Déterminer si les économies d’espace sont significatives
Si la valeur de row_count * (avg_rowlen_fixed_format – avg_rowlen_vardecimal_format) est relativement grande (plusieurs Mo ou plus), alors le fait de changer l’option de table ‘vardecimal storage format’ à 1 (activé) peut permettre d’économiser une quantité significative d’espace. Cela peut être fait en utilisant la commande suivante :
EXEC sp_tableoption 'VotreTable', 'vardecimal storage format', 1
GO
Exemple
Prenons l’exemple de la table de base de données Northwind [Order Details] et créons une copie de cette table appelée OrdDetails. Nous allons ensuite modifier la colonne unitPrice en décimal (12, 7) sur la nouvelle table.
USE Northwind
GO
SELECT * into OrdDetails FROM "Order Details"
GO
ALTER table OrdDetails ALTER column unitPrice decimal (12,7)
GO
Ensuite, activez vardecimal pour la base de données :
EXEC sp_db_vardecimal_storage_format 'Northwind', 'ON'
GO
Estimez combien d’octets seront économisés :
EXEC sys.sp_estimated_rowsize_reduction_for_vardecimal 'dbo.OrdDetails'
GO
Le résultat vous fournira les longueurs moyennes des lignes avant et après l’activation du stockage vardecimal. En fonction de la formule row_count * (avg_rowlen_fixed_format – avg_rowlen_vardecimal_format), vous pouvez déterminer la quantité d’espace qui sera économisée. Si les économies sont importantes, vous pouvez activer le format de stockage vardecimal en utilisant la commande suivante :
EXEC sp_tableoption 'dbo.OrdDetails', 'vardecimal storage format', 1
GO
Notez que cet exemple a été testé sur l’édition Developer de SQL Server 2014.
En récupérant de l’espace dans votre base de données SQL Server grâce à l’utilisation du stockage vardecimal, vous pouvez optimiser l’efficacité du stockage et potentiellement réduire les coûts liés aux besoins de stockage. Envisagez de mettre en œuvre cette solution pour vos grandes tables avec des types de données décimales afin de maximiser l’utilisation de l’espace.